为什么下面的代码抛出ConcurrentModificationException?JoshBloch可以避免ConcurrentModificationException。
ArrayList<Integer> list=new ArrayList<Integer>(); list.add(100); list.add(200); list.add(300); list.add(400); for(Integer field : list) { list.remove(field); list.add(200); }
使用“ for each”循环时,不能在列表上使用remove。相反,您可以使用此方法在迭代器上调用remove:
Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()) { Integer integer = iterator.next(); // ...check if you want to remove this one... iterator.remove(); }
如果您实际上想用“ 200”代替每个值,或用其他值代替,则建立一个新列表可能更有意义:
List<Integer> newList = new ArrayList<Integer>(); Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()) { Integer integer = iterator.next(); newList.add(integer); iterator.remove(); }