List<Integer> list=new ArrayList();
list.add(10);
list.add(5);
list.add(5);
list.add(6);
list.add(1);
使用for循环添加:
System.out.println("操作前"+list);
for (int i=0;i<list.size();i++){
if (list.get(i)==10){
list.add(9);
}
}
System.out.println("操作后"+list);
输出:
操作前[10, 5, 5, 6, 1]
操作后[10, 5, 5, 6, 1, 9]
使用增强for循环添加:
System.out.println("操作前"+list);
for (int a :list){
if (a==10){
list.add(9);
}
}
System.out.println("操作后"+list);
输出:
并发修改异常
使用iterator增加:
System.out.println("操作前"+list);
Iterator<Integer> itt = list.iterator();
while(itt.hasNext()){
if (itt.next()==10){
list.add(10);
}
}
System.out.println("操作后"+list);
输出:
并发修改异常
使用listIterator增加:
System.out.println("操作前"+list);
ListIterator<Integer> it= list.listIterator();
while(it.hasNext()){
if (it.next()==10){
it.add(10);
}
}
System.out.println("操作后"+list);
输出:
操作前[10, 5, 5, 6, 1]
操作后[10, 10, 5, 5, 6, 1]
使用普通for循环删除:
System.out.println("操作前"+list);
for (int i=0;i<list.size();i++){
if (list.get(i)==5){
list.remove(i);
}
}
System.out.println("操作后"+list);
输出:
操作前[10, 5, 5, 6, 1]
操作后[10, 5, 6, 1]
使用增强for循环删除:
List<String> list2 = new ArrayList<>(4);
list2.add("a");
list2.add("ab");
list2.add("abc");
list2.add("abcd");
System.out.println("操作前"+list2);
for (String a :list2){
if (a.equals("a")){
list2.remove(a);
}
}
System.out.println("操作后"+list2);
输出:并发修改异常
使用iterator删除:
System.out.println("操作前"+list);
Iterator<Integer> it= list.iterator();
while(it.hasNext()){
if (it.next()==5){
it.remove();
}
}
System.out.println("操作后"+list);
输出:
操作前[10, 5, 5, 6, 1]
操作后[10, 6, 1]
解决问题:
循环删除的时候,使用增强for循环会发生修改异常。使用普通for循环不会发生并发修改异常,但是会导致删除不完全,这是因为在删除的时候,会把后面的数据往前移动,可以使用倒序遍历解决这个问题。当然,在使用iterator也不会发生问题(最好)。
为什么使用iterator增加会报错,因为iterator没有add方法,必须用list.add。而listIterator有add方法。