【发布时间】:2016-08-23 16:34:51
【问题描述】:
我编写的迭代器没有按计划进行迭代。它应该迭代一个 ArrayList 但它会继续循环第一个项目:aylmao
目标是有一个有效的自定义迭代器,它将迭代一个通用的 ArrayList
我很想在聊天中问这个问题,但那里没有人。
这是导致代码的问题:
@Override
public Iterator<T> iterator() {
final SimpleList<T> list = this;
return new Iterator<T>() {
int index = 0;
@Override
public boolean hasNext() {
return index < list.size() && list.get(index) != null;
}
@Override
public T next() {
T temp = list.get(index++);
index++;
return temp;
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
public static void main(String[] args) {
SimpleList<String> list = new SimpleList<String>();
list.append("aylmao");
list.append("1aylmao");
list.append("2aylmao");
list.append("3aylmao");
list.append("4aylmao");
list.append("5aylmao");
list.append("6aylmao");
while (list.iterator().hasNext()) {
System.out.println(list.iterator().next());
}
}
【问题讨论】:
-
为什么要增加两次索引?
-
一个返回下一项,一个将索引向前移动一个位置
-
您不需要这样做,您想返回当前索引处的内容,然后增加索引。只做 return list.get(index++);
-
自己注意到了,谢谢建议,问题已得到解答。你们摇滚
-
很高兴我们能帮上忙,干杯
标签: java arraylist data-structures iterator