昨天,当我在回答问题时使用迭代器和删除时收到ConcurrentModificationException错误我添加了一个通知,
当你有ArrayLists时,使用迭代器不是一个好主意.
你不需要深刻理解那个问题来回答这个问题.
在那里,我得到两条评论,我错了.
我的论点:
迭代器的代码可读性差得多.
有可能引发难以调试的ConcurrentModificationException.
你能解释一下吗?
问题:我们是否需要在ArrayList上使用迭代器?
UPD
这是关于显式使用Iterator.
public static void main(String[] args) {
List<String> list = new ArrayList();
list.add("AA");list.add("Aw");list.add("Aw");list.add("AA");
list.add("AA");list.add("A45");list.add("AA");
list.add("Aal");list.add("Af");list.add("An");
System.out.println(list);
for(int i=0;i<list.size();i++){
if(list.get(i).equals("AA")){
list.remove(i);
}
}
System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)
我目前正在尝试删除ArrayList中具有值的所有元素"AA",但是,它只删除其中的一些而不是全部.任何人都可以向我解释我做错了什么?
arraylist中的元素:
[AA, Aw, Aw, AA, AA, A45, AA, Aal, Af, An]
Run Code Online (Sandbox Code Playgroud)
我试图删除所有具有值的字符串后输出"AA".
[Aw, Aw, AA, A45, Aal, Af, An]
Run Code Online (Sandbox Code Playgroud)
为什么还在AA输出列表中?
我试图从列表中删除对象,我得到以下异常:
failure:java.util.ConcurrentModificationException null
Run Code Online (Sandbox Code Playgroud)
这就是我尝试从列表中删除对象的方法:
private List<testVO> removeDuplicateEntries(List<testVO> sessionList,List<testVO> dbList){
for (Iterator<testVO> dbIterator = dbList.listIterator(); dbIterator.hasNext(); ) {
testVO voDB = dbIterator.next();
for (Iterator<testVO> sessionIterator = sessionList.iterator(); sessionIterator.hasNext();) {
testVO voSession = (testVO) sessionIterator.next();
if(voDB.getQuestionID().intValue() == voSession.getQuestionID().intValue()){
//remove the object from sesion list
sessionIterator.remove();
//Add the object from DB to session list
sessionList.add(voDB);
}
}
}
return sessionList;
}
Run Code Online (Sandbox Code Playgroud)
我想删除当前的副本sessionList并添加来自的重复项dbList.
我试图用iterator一会儿迭代列表,由于某种原因,它会无限循环。
这是代码
{
List<Person> Person1 = new ArrayList<Person>();
Person p1 = new Person("Name1", "Virginia");
Person1.add(new Person("Nae2", "Virginia"));
printerlist(Person1);
printerlist(p1);
}
private static void printerlist(List<Person> p) {
/*
* print the list
*/
while (p.iterator().hasNext()) {
System.out.println(p.iterator().next().getCity());
}
}
Run Code Online (Sandbox Code Playgroud)