gpt4 book ai didi

java - 如何为列表编写迭代器?

转载 作者:行者123 更新时间:2023-12-01 19:21:18 25 4
gpt4 key购买 nike

我有一个实现 List 接口(interface)并将数据存储在对象数组中的类。现在我需要为我的类编写迭代器方法。如何开始?我考虑编写一个实现 Iterator 接口(interface)的子类。该类的对象将具有当前索引和最后索引的参数。每次调用 next/hasNext 时,这些参数都会被修改。这种做法正确吗?但是,remove() 方法有一个问题,因为它应该允许删除调用我的迭代器的类的对象。如何解决这个问题?我的主类的 iterator() 方法中应该发生什么?

我的伪代码:

class MyCollection<T> implements List<T>{
T[] tab;

MyCollection(int len) {
tab = (T[])new Object[len];
}
public Iterator iterator(){
}
}

class MyIterator<T> implements Iterator {

private int current;
private int last;

public void remove(){
}

public T next(){

}

public boolean hasNext(){

}

}

最佳答案

I have a class implementing List interface and storing data in an array of Objects.

看起来您正在重新实现ArrayList。这样做有充分的理由吗?

Object of the class will have parameters of current index and last index. At each call to next/hasNext those parameters will be modified. Is this approach correct ?

我认为你应该只需要一个索引。但基本的想法是正确的。

But then there is a problem with remove() method, since it should allow to delete object of class calling my iterator. How to solve this ?

有两种方法:

  1. 从数组中删除元素并以某种方式安排“洞”被填充。 a) 将所有元素复制到大小为 tab.length - 1 的新数组,b) 使用 System.arraycopy 或等效方法将元素移动到已删除元素之后,或者c) 将 null 分配给槽并更改类以跳过 null 元素。 (最后一个可能是一个非常糟糕的主意......)

  2. MyIterator.remove() 抛出 UnsupportedOperationException。根据 Iterator API 规范,remove 方法是可选方法。

Also what should happen in iterator() method of my main class ?

它应该创建并返回 MyIterator 类的实例。

关于java - 如何为列表编写迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4121414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com