java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
下面小编就为大家带来一篇 java 中循环遍历删除 List 和 Set 集合中元素的方法 (推荐) 小编觉得挺不错的, 在就分享给大家, 也给大家做个参考一起跟随小编过来看看吧
今天在做项目时, 需要删除 List 和 Set 中的某些元素, 当时使用边遍历, 边删除的方法, 却报了以下异常:
ConcurrentModificationException
为了以后不忘记, 使用烂笔头把它记录如下:
错误代码的写法, 也就是报出上面异常的写法:
- Set < CheckWork > set = this.getUserDao().getAll(qf).get(0).getActionCheckWorks();
- for (CheckWork checkWork: set) {
- if (checkWork.getState() == 1) {
- set.remove(checkWork);
- }
- }
注意: 使用上面的写法就会报上面的 ConcurrenModificationException 异常, 原因是, 集合不可以一边遍历一边删除
正确的写法如下:
1. 遍历删除 List
- List < CheckWork > list = this.getUserDao().getAll();
- Iterator < CheckWork > chk_it = list.iterator();
- while (chk_it.hasNext()) {
- CheckWork checkWork = chk_it.next();
- if (checkWork.getPlanState() == 1) {
- chk_it.remove();
- }
- }
2. 遍历删除 Set
- Set < CheckWork > set = this.getUserDao().getAll().get(0).getActionCheckWorks();
- Iterator < CheckWork > it = set.iterator();
- while (it.hasNext()) {
- CheckWork checkWork = it.next();
- if (checkWork.getState() == 1) {
- it.remove();
- }
- }
来源: http://www.phperz.com/article/18/0215/359281.html