list.remove(x); } } 这种方式的问题在于,删除元素后继续循环会抛异常ConcurrentModificationException,因为元素在使用的时候发生了并发修改,导致异常被抛出。但是删除完毕马上使用break跳出,则不会触发报错。 iterator遍历删除 下面提供一个用迭代器在遍历List集合时删除元素的方法: Iteratorit=list.iterato...
不过,需要注意的是,调用remove方法前必须先调用next,比如,通过迭代器删除所有元素,直觉上,可以这么写: public static void removeAll(ArrayList<Integer> list){ Iterator<Integer> it = list.iterator(); while(it.hasNext()){ it.remove(); } } 实际运行,会抛出异常java.lang.IllegalStateException,正确写法是:...
public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(2); list.add(3); list.add(4); list.add(4); list.add(1); list.add(3); list.add(6); list.add(4); for(int i=0;i<list.size();i++){ if(list.get(i)==4){ list.remove(i...
hasNext()next()remove()remove()HasNextNextRemove 总结 通过使用迭代器,我们可以方便地遍历List中的元素并删除指定的数据。需要注意的是,在使用迭代器删除元素时,要避免直接使用List的remove()方法,因为这样会导致ConcurrentModificationException异常。迭代器提供了一种安全的方式来删除集合中的元素,建议在需要删除List中...
迭代器的remove()方法不可多次连续调用 情景复现 如上文所述,在迭代器遍历List过程中,如果需要删除元素,正确的姿势是通过迭代器Iterator的remove方法,但是不可连续两次及其以上调用来删除,否则将会引发 IllegalStateException 异常。现来通过复现场景结合相关源码分析解释其中缘由。测试代码及测试结果如下所示 ...
若需要删除,则使用迭代器的remove()方法删除当前元素: 如果确定要删除当前元素,我们应使用迭代器的remove()方法,而不是List的remove()方法,以避免ConcurrentModificationException异常。 java iterator.remove(); } } 完成遍历并输出结果: 遍历完成后,我们可以打印出修改后的List,以验证元素已被正确删除。 java Syste...
(2)Iterator.remove()是唯一安全的方式来在迭代过程中修改集合;如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。而且每调用一次next()方法,remove()方法只能被调用一次,如果违反这个规则将抛出一个异常。 3 ListIterator简介 ListIterator是一个功能更加强大的, 它继承于Iterator接口,只能用于各种Lis...
Java的List在删除元素时,一般会用list.remove(o)/remove(i)方法。在使用时,容易触碰陷阱,得到意想不到的结果。总结以往经验,记录下来与大家分享。首先初始化List,代码如下: Plain Text 复制代码 999 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
for(Integer i:list){ if(i==3) list.remove(i); } System.out.println(list); 抛出异常:java.util.ConcurrentModificationException foreach 写法实际上是对的 Iterable、hasNext、next方法的简写。因此从List.iterator()源码着手分析,跟踪iterator()方法,该方法返回了 Itr 迭代器对象。