arraylist遍历的同时删除数据
(云从科技面试有问到过)
正确方法:用迭代器遍历删除
List<String> lst = new ArrayList<String>();
lst.add("aaa");
lst.add("bbb");
lst.add("ccc");
lst.add("ddd");
lst.add("ddd");
lst.add("ddd");
lst.add("ddd");
lst.add("eee");
Iterator<String> iter = lst.iterator();
while(iter.hasNext()){
String s = iter.next();
if(s.equals("ddd")){
iter.remove();
}
}
System.out.println(lst);
错误方法一:
List<String> lst = new ArrayList<String>();
lst.add("aaa");
lst.add("bbb");
lst.add("ccc");
lst.add("ddd");
lst.add("ddd");
lst.add("ddd");
lst.add("ddd");
lst.add("eee");
for(String s:lst){
if(s.equals("ddd")){
lst.remove(s);
}
}
System.out.println(lst);
并发修改错误
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996)
错误方法二:
List<String> lst = new ArrayList<String>();
lst.add("aaa");
lst.add("bbb");
lst.add("ccc");
lst.add("ddd");
lst.add("ddd");
lst.add("ddd");
lst.add("ddd");
lst.add("eee");
for(int i=0;i<lst.size();i++){
if(lst.get(i).equals("ddd")){
lst.remove(i);
}
}
System.out.println(lst);
结果
[aaa, bbb, ccc, ddd, ddd, eee]