`

list删除集合元素的方法

 
阅读更多
list删除某个集合的方法  2011-05-19 08:45:05|  分类: Java基础 |  标签: |字号大
中
小 订阅 
public void setReparation( Reparation reparation ) {   
    boolean flag = false;   
    for (Iterator it = this.reparations.iterator();it.hasNext();){    //reparations为Collection   
        Reparation repa = (Reparation)it.next();   
        if (repa.getId() == reparation.getId()){   
            it.remove();   
            flag = true;   
            break;   
        }   
    }   
    if(flag){   
      this.reparations.add(reparation);   
    }   
}  

如果用reparations.remove() 会报异常、

另外为什么要加break. 如果仅删除一条记录的话,这样可以让遍历在这里终止,而不会让遍历继续下去、
jdk5.0以上的for-each也是利用内部的iterator来遍历集合的(跟以前的iterator一样)获得的Iterator是一个内部类产生的迭代器,这个迭代器在调用next方法时,会检查列表是否被修改过,如果被修改过,就会抛出ConcurrentModificationException异常。进一步说,当使用 fail-fast iterator 对 Collection 或 Map 进行迭代操作过程中尝试直接修改 Collection / Map 的内容时,即使是在单线程下运xi,java.util.ConcurrentModificationException 异常也将被抛出。Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.ConcurrentModificationException 异常。  所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象,Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
有意思的是如果你的 Collection / Map 对象实际只有一个元素的时候, ConcurrentModificationException 异常并不会被抛出。这也就是为什么在 javadoc 里面指出: it would be wrong to write a program that depended on this exception for its correctness: ConcurrentModificationException should be used only to detect bugs.
解决方法:在Map或者Collection的时候,不要用它们的API直接修改集合的内容,如果要修改可以用Iterator的remove()方法
由于for-each的写法,使我们无法获得iterator对象,所以这种遍历方式不能进行删除操作。只好改成了比较土的方法实现了,如下:
for (Iterator it = desk.getPkers().iterator(); it.hasNext();) {                  
	PKer pkerOnDesk =(PKer) it.next();   
	it.remove(); 

            }


 

 

分享到:
评论

相关推荐

    C#遍历List并删除某个元素的方法

    当我们需要遍历List并根据条件删除特定元素时,需要注意正确的方法,以避免在遍历过程中出现错误。以下将详细介绍如何在C#中遍历List并删除元素,包括正序和倒序遍历的技巧。 首先,我们来看一下错误的遍历方式。...

    在list集合中输入元素,去除重复的元素并输出

    根据给定文件的信息,本文将详细介绍如何在Java的List集合中去除重复元素的三种方法:使用for循环、使用迭代器以及利用HashSet的特性。 ### 一、使用for循环去除重复元素 这种方法的基本思想是通过双重循环来遍历...

    两个集合比较(新增、编辑、删除)

    在IT领域,集合比较是一...通过理解并熟练运用这些方法,我们可以有效地比较和操作两个List集合,无论是查找新增、编辑还是删除的元素。在实际项目中,这种能力对于数据同步、日志分析、版本控制等多个场景都至关重要。

    C#在foreach遍历删除集合中元素的三种实现方法

    在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。 集合已修改;可能无法执行枚举操作。 方法一:采用for循环,并且从尾到头遍历 如果...

    C#List集合分组winform把List分组

    List是C#中一种非常实用的数据结构,它提供了动态数组的功能,允许我们在运行时添加、删除或修改元素。当需要对这些数据进行分组和筛选时,C#提供了Linq(Language Integrated Query,语言集成查询)这一强大的工具...

    6种方法初始化JAVA中的list集合

    在Java编程中,List集合是开发人员经常使用的一种数据结构,用于存储有序的元素列表。本文将详细介绍6种初始化Java List集合的方法,并通过代码示例帮助理解每种方法的使用和特点。 1. 常规方式 这是最常见的初始化...

    STL中list的使用

    2. **merge方法**:将另一个`list`的元素合并到当前`list`中,并保持排序。如`c2.merge(c1);`。 3. **pop_back和pop_front方法**:分别移除`list`的最后一个和第一个元素。 4. **push_back和push_front方法**:分别...

    Java List集合的应用.rar

    例如,如果要删除所有指定日期前的日志,可以先找到第一个符合条件的元素,然后用`list.removeAll()`删除所有匹配的元素。 3. **日志修改**:要修改日志项,先找到对应的日志对象,然后直接修改其属性,如`list.get...

    C#List字典Dictionary泛型集合实例,源码

    例如,你可以创建一个`List<int>`来存储整数序列,然后通过索引访问或修改元素,也可以使用`Add`方法向列表末尾添加元素,`RemoveAt`方法移除指定位置的元素。 接着,`Dictionary, TValue>`是一个键值对的集合,它...

    java中关于集合的操作

    - **容量与大小**: `size()`返回集合元素数量,`ensureCapacity()`预先设定容量。 4. **集合转换**: - `toArray()`:将集合转换为数组。 - `copyOf()`:Java 8引入,用于安全地创建数组副本。 5. **集合操作**...

    hibernate list集合映射

    1. **添加元素**:可以通过`session.save()`或`session.merge()`方法保存新的元素,并将其添加到List中。 2. **删除元素**:调用`session.delete()`删除元素,同时从List中移除。 3. **更新元素**:修改List中的...

    C#集合遍历时删除和增加元素的方法

    当我们需要在遍历集合的过程中删除或添加元素时,必须注意一些特定的策略,因为不是所有的集合类型都支持这种操作。这里我们将详细讨论如何在C#中处理这种情况,特别是在使用`LinkedList<T>`时。 首先,C#的标准...

    C#List泛型集合实例,源码

    首先,`List<T>`的泛型参数`T`代表了集合中元素的类型。例如,当我们创建一个存储整数的`List<int>`时,`T`就是`int`。这样做的好处是能够确保集合中的所有元素都是同一类型,提高了代码的类型安全性和效率。 创建`...

    java的list取之方法

    `List`的主要特点是可以通过索引访问元素,同时也支持插入、删除等操作。 ### List的主要实现类 1. **ArrayList**:基于动态数组实现,线程不安全,但提供了高效的随机访问能力。 2. **LinkedList**:基于双向链表...

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

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

    易语言仿java集合 list map源码

    例如,他们可能会创建一个List类,包含添加、删除、查找、遍历等方法,以支持对元素的操作。对于Map,可能需要实现插入、删除、获取键值对、遍历键值对等功能。 `java对象模块.e`可能是一个包含了易语言中对Java...

    java集合类arraylist循环中删除特定元素的方法.docx

    ### Java集合类ArrayList循环中删除特定元素的方法 #### 背景与问题 在Java编程中,`ArrayList`是开发者最常使用的集合类之一。它实现了`List`接口,提供了动态数组的功能。在实际开发过程中,经常需要遍历`...

    C#查找列表中所有重复出现元素的方法

    `List<T>`是.NET框架提供的一个泛型类,它实现了`IList<T>`、`ICollection<T>`和`IEnumerable<T>`接口,提供了动态数组的功能,允许我们方便地添加、删除和查找元素。对于查找重复元素,我们通常会遍历列表,比较每...

    Java数组去重 集合List去重的常用方法总结

    这种方法通过两层循环来遍历List中的所有元素,并删除重复项。 **示例代码**: ```java public static List<Integer> removeDuplicate1(List<Integer> list) { for (int i = 0; i < list.size() - 1; i++) { for...

    集合类(二):List集合

    List接口继承自Collection接口,它定义了一种有序的、允许重复元素的集合。本篇我们将深入探讨List集合,包括其特点、常用实现类、操作方法以及与数组的对比。 List接口的特点: 1. 有序性:List中的元素是有顺序的...

Global site tag (gtag.js) - Google Analytics