我需要编写一个简单的函数来删除List
中包含类Elem
对象的所有条目。我编写了函数removeAllElements
,但如果List<Elem>
的大小大于1,它就不起作用。
public class Test {
public static void main(String[] args) {
Work w = new Work();
w.addElement(new Elem("a",new Integer[]{1,2,3}));
w.addElement(new Elem("b",new Integer[]{4,5,6}));
w.removeAllElements(); // It does not work for me.
}
}
public class Work {
private List<Elem> elements = new ArrayList<Elem>();
public void addElement(Elem e) {
this.elements.add(e);
}
public void removeAllElements() {
Iterator itr = this.elements.iterator();
while(itr.hasNext()) {
Object e = itr.next();
this.elements.remove(e);
}
}
}
public class Elem {
private String title;
private Integer[] values;
public Elem(String t,Integer v) {
this.title = t;
this.values = v;
}
}
修改#1 错误消息如下:
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
答案 0 :(得分:11)
代码无法编译。什么是this.tokens
?
无论如何,如果你想在迭代时删除一个元素,你必须使用迭代器的remove方法来做它:
itr.next();
itr.remove();
但是,removeAllElements
方法只能this.elements.clear()
。更直接,更有效率。
答案 1 :(得分:6)
在迭代时删除元素时,您必须使用itr.remove()
而不是this.tokens.remove(e)
。
有关详细信息,请查看Iterator.remove()
答案 2 :(得分:2)
我假设tokens
是你的Arraylist?
从数组列表中动态删除元素时,需要使用迭代器提供的.remove方法。所以你需要做这样的事情:
public void removeAllElements() {
Iterator itr = this.elements.iterator();
while(itr.hasNext()) {
Object e = itr.next();
itr.remove();
}
}
如果您只想删除列表中的所有元素,可以调用Arraylist的.clear方法:
从此列表中删除所有元素。该列表将为空 在此呼叫返回后。
答案 3 :(得分:1)