Removed list : [1, 2, 4, 5] 如日志所见,其中值为4的元素并未经过判断,漏网之鱼。 解决方法为以下两个(但一般不建议我们在遍历中用不是遍历本身的函数删除元素,见下节关于“ConcurrentModificationException”的内容): 1、对于此情况,我一般都从后面开始遍历,以避免问题: import java.util.ArrayList; import...
1.1 Set接口 存入Set的每个元素都必须是唯一的,Set接口不保证维护元素的次序; HashSet类: 为快速查找设计的Set,存入HashSet的对象必须定义hashCode(),它不保证集合的迭代顺序; LinkedHashSet类: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。 1.2 List接口 List按对象进入的顺序保存对象,不做...
二、ConcurrentModificationException异常-Iterator遍历集合过程中用其他手段(或其他线程)操作元素 ConcurrentModificationException是Java集合的一个快速报错(fail-fast)机制,防止多个线程同时修改同一个集合的元素。在用Iterator遍历集合时,如果你用其他手段(非Iterator自身手段)操作集合元素,就会报ConcurrentModificationException。
1.迭代遍历: Set<String> set = new HashSet<String>(); Iterator<String> it = set.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); } 1. 2. 3. 4. 5. 6. 2.for循环遍历: for (String str : set) { System.out.println(str); } 1. 2. 3....
set.remove(checkWork);} } 注意:使⽤上⾯的写法就会报上⾯的ConcurrenModificationException异常,原因是,集合不可以⼀边遍历⼀边删除。正确的写法如下:1. 遍历删除List List<CheckWork> list = this.getUserDao().getAll();Iterator<CheckWork> chk_it = list.iterator();while(chk_it.hasNext()...
Set<CheckWork> set = this.getUserDao().getAll(qf).get(0).getActionCheckWorks(); for(CheckWork checkWork : set){ if(checkWork.getState()==1){ set.remove(checkWork); } } 注意:使用上面的写法就会报上面的ConcurrenModificationException异常,原因是,集合不可以一边遍历一边删除。
需要删除List和Set中的某些元素,当时使用边遍历,边删除的方法,却报了以下异常:ConcurrentModificationException为了以后不会忘记,和也给遇到同样问题的同事提供一个参考: 出现错误的代码如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作原因:貌似跟线程有关