【发布时间】:2015-04-02 05:54:27
【问题描述】:
我已经搜索了这个网站(以及网络),但由于某种原因找不到有效的答案。要么我得到一个索引越界错误,要么我的代码的下一部分不会执行。我要做的就是使用迭代器从 Java 列表中删除一个项目。这是我的代码:
public boolean remove(T item) {
while (bag.iterator().hasNext()) {
T i = bag.iterator().next();
if (i.equals(item)) {
bag.iterator().remove();
return true;
}
}
return false;
}
我的迭代器显然继承自我的“Bag”类,但这里也是如此:
public Iterator<T> iterator() {
return new Iterator<T>() {
private int current = 0;
public boolean hasNext() {
return current < size;
}
public T next() {
return data[current++];
}
public void remove() {
for (int i=current-1; i<size-1; i++)
data[i] = data[i+1];
size--;
}
};
}
非常感谢任何帮助,谢谢大家!
克莱顿
【问题讨论】:
-
数组不是列表。您不能对两个不同的容器执行相同的操作。
-
@AngeloAlvisi 你到底在说什么?
-
@ajb 标签。数组不是 List,Iterator 也不是 ListIterator,即使 Iterator 可以在 List 上使用。
-
@AngeloAlvisi 我明白了——我没有看过标签。无论如何,我已经几乎放弃了期望标签与问题有任何关系。
-
@AngeloAlvisi 你可能已经放弃了,但不知何故确切地知道我在说什么,并完美地回答了这个问题,正如预期的那样。所以谢谢,杰森。
标签: java arrays list iterator listiterator