不允许key 或value 为null 迭代器 迭代器为我们提供了统一的遍历容器(list map set)的方式,测试如下: package cn.sxt.collection; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.uti...
不过,需要注意的是,调用remove方法前必须先调用next,比如,通过迭代器删除所有元素,直觉上,可以这么写: public static void removeAll(ArrayList<Integer> list){ Iterator<Integer> it = list.iterator(); while(it.hasNext()){ it.remove(); } } 实际运行,会抛出异常java.lang.IllegalStateException,正确写法是:...
while(iterator.hasNext()) { if(iterator.next() == 2) { iterator.remove(); } } System.out.println(list.toString()); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 这样就不会出错了。我们来看一下迭代器中这几个方法的实现,探究一下为什么不会出错。下面是ArrayList中部分代码: pr...
list.remove(x); } } 这种方式的问题在于,删除元素后继续循环会抛异常ConcurrentModificationException,因为元素在使用的时候发生了并发修改,导致异常被抛出。但是删除完毕马上使用break跳出,则不会触发报错。 iterator遍历删除 下面提供一个用迭代器在遍历List集合时删除元素的方法: Iteratorit=list.iterato...
迭代器的remove()方法不可多次连续调用 情景复现 如上文所述,在迭代器遍历List过程中,如果需要删除元素,正确的姿势是通过迭代器Iterator的remove方法,但是不可连续两次及其以上调用来删除,否则将会引发 IllegalStateException 异常。现来通过复现场景结合相关源码分析解释其中缘由。测试代码及测试结果如下所示 ...
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 ...
list.add("C"); list.add("C"); [C, A, B, C, F, C, C] 怎么移除掉list里面的某个元素呢 ? list里面给我们提供了4个方法 : 先看remove (Object o) : 这个方面字面意思看,就是,你想移除list里面的哪个 Object ,你传进来就可以。
foreach其实是用迭代器来进行遍历的,而在遍历时直接使用arraylist的remove方法会导致什么问题呢? 可以再看一下fastremove和迭代器遍历的内部代码: 最后导致抛出上面异常的其实就是这个,简单说,调用list.remove()方法导致modCount和expectedModCount的值不一致而报异常 ...
foreach其实是用迭代器来进行遍历的,而在遍历时直接使用arraylist的remove方法会导致什么问题呢? 可以再看一下fastremove和迭代器遍历的内部代码: 最后导致抛出上面异常的其实就是这个,简单说,调用list.remove()方法导致modCount和expectedModCount的值不一致而报异常 ...