`
阅读更多

今天在做项目时,需要删除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();
			}
		}

 

1
4
分享到:
评论
5 楼 www314599782 2015-10-09  
CopyOnWriteArraySet
CopyOnWriteArrayList 可以

HashSet  用Iterator 也一样不行 估计楼主 集合中只有一个值  ,我多加了几个就不行了
4 楼 www314599782 2015-10-09  
你这种方法还是一样的不行
3 楼 dsxwjhf 2015-04-20  
blackstreet 写道
CopyOnWriteArraySet
CopyOnWriteArrayList 用这个就行了,搞这么烦



CopyOnWriteArrayList 里面有个轻量级锁,性能会差一些
2 楼 YorkTsai 2014-02-13  
blackstreet 写道
CopyOnWriteArraySet
CopyOnWriteArrayList 用这个就行了,搞这么烦


我更喜欢朴素的解决办法
1 楼 blackstreet 2013-06-18  
CopyOnWriteArraySet
CopyOnWriteArrayList 用这个就行了,搞这么烦

相关推荐

    java中循环遍历删除List和Set集合中元素的方法(推荐)

    为了避免上述异常,有以下两种正确的方法来遍历并删除List和Set集合中的元素: 1. **使用Iterator进行遍历和删除** 这种方法通过获取集合的Iterator,并在循环中使用`iterator.remove()`方法删除元素,避免了并发...

    java集合类详解(set list ArrayList等java集合类详述)

    迭代器(Iterator)提供了一种通用的方式来访问集合中的元素。迭代器的工作原理是通过 next() 方法返回元素,并可以通过 remove() 方法删除元素。 Collections 类提供了一些有用的方法,如排序、取最大和最小的元素...

    Tedu一阶段JavaSet集合和List集合

    ### Tedu一阶段Java Set集合和List集合详解 #### 一、集合概述 - **集合的概念**:在Java中,集合是一种容器,用于存储多个对象。它可以存储不同类型的对象,并且提供了一系列的操作来管理这些对象。 - **...

    java中关于集合的操作

    泛型允许在集合中声明和使用特定类型的元素,提高代码安全性和可读性。 7. **并发集合**: Java提供了线程安全的集合实现,如`ConcurrentHashMap`, `CopyOnWriteArrayList`等,用于多线程环境。 8. **集合的遍历...

    List和Set使用retainAll方法的比较

    `retainAll`是Java集合框架中`Collection`接口的一个方法,它的作用是保留当前集合中与指定集合交集的部分,即删除所有不在指定集合中的元素。这个方法在处理大量数据时,对于集合的筛选和优化非常有用。 1. **List...

    Java应用:两种Java容器类List和Set分析

    ### Java应用:两种Java容器类List和Set分析 #### 一、概述 在Java编程语言中,集合框架(Collections Framework)是处理数据的核心组件之一,它提供了存储和操作对象的各种方式。本文将深入探讨Java中的两种重要...

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List...// HashMap不保证集合中元素的顺序, // LinkedHashMap按插入顺序排序 // TreeMap按自己的意愿进行排序,默认按key值升序排序。 另包含一篇网文:在java中使用TreeMap进行中文排序

    Java-Java集合体系-List-Set

    在Java中,集合主要分为三大接口:List、Set和Map。这些接口各有特点,适用于不同的应用场景。 一、List接口 List接口是单列集合的子接口,它允许存储重复的元素,并且元素具有顺序性。List接口提供了丰富的操作...

    java中list、set和map 的区别

    - **HashSet**: 这是一种基于哈希表的`Set`实现,提供了高效的添加、删除和查找操作。`HashSet`不保证集合中元素的顺序。 - **TreeSet**: 这种实现通过红黑树(一种自平衡二叉搜索树)来存储元素,可以自然地对...

    set转成list集合再排序输出

    Java相关 public static void main(String[] args) { User u1=new User(1, "zhangsan");... //放入到Set集合中 Set userset=new HashSet(); userset.add(u1); userset.add(u2); userset.add(u3);

    java List、Set与Array之间的相互转换

    在Java编程语言中,数据结构的使用是至关重要的,其中包括List、Set和Array。这三种数据结构各有特点,适用于不同的场景。理解它们之间的相互转换能够帮助我们更好地管理和操作数据。以下将详细介绍Java中List、Set...

    JAVA集合map、list、set详解

    详细描述map、list、set的常用子类特性,各个场景的适用。

    Java集合Collection、List、Set、Map使用详解

    本文将深入解析Java集合中的Collection、List、Set和Map,包括它们的使用方法、实现原理以及如何进行排序。 ### 集合框架概述 1.1.1 容器简介 容器是Java集合框架的基础,它是一个可以存储多个对象的容器,提供了...

    java集合类list-set-map.doc

    java集合类list-set-map.doc

    Java集合Collection、List、Set、Map使用详解.pdf

    Collection接口是Java集合框架的根接口,定义了基本的集合操作,而List接口和Set接口继承自Collection接口,提供了有序和无序的集合操作。Map接口提供了键值对的存储和操作。 Java集合框架是Java语言中最基本也是最...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    迭代器(Iterator)是用来遍历集合中元素的一种方式。`Collection`接口提供了`iterator()`方法,用于获取迭代器。 ```java Iterator iterator = collection.iterator(); while (iterator.hasNext()) { Object ...

    java中三种集合set、map、list的区别与联系

    在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中最常用的是`Set`、`Map`和`List`。这三种集合类型各自具有独特的特性和用途,理解它们之间的区别与联系对于有效地使用Java进行数据管理至关重要...

    Java集合排序及java集合类详解(Collection、List、Map、Set)讲解.pdf

    * remove(Object o):从集合中删除元素 * contains(Object o):判断元素是否在集合中 * iterator():返回集合的迭代器 2.2 迭代器 迭代器是Collection的一个重要组件,用于遍历集合中的元素。迭代器提供了多种方法...

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

Global site tag (gtag.js) - Google Analytics