`

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并删除某个元素的方法

    主要介绍了C#遍历List并删除某个元素的方法,实例分析了正序与倒序遍历list及删除元素的使用技巧,需要的朋友可以参考下

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

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

    Java集合框架List接口.pdf

    Java集合框架中的List接口是一种有序的集合,它可以存储重复的元素。它是Collection接口的子接口,提供了一系列可以对列表进行操作的方法,如添加、插入、删除、获取元素等。List接口还可以通过索引访问元素,类似于...

    实验05 Java集合.doc

    4)打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。 3、编写程序练习Map集合的基本使用: 1)创建一个只能容纳String对象的...

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

    下面小编就为大家带来一篇java中循环遍历删除List和Set集合中元素的方法(推荐)。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JAVA集合(List,Set,Map)

     (1) 单元素添加、删除操作: boolean add(Object o):将对象添加给集合 boolean remove(Object o): 如果集合中有与o相匹配的对象,则删除对象o (2) 查询操作: int size() :返回当前集合中元素的数量 boolean...

    Python list列表中删除多个重复元素操作示例

    本文实例讲述了Python list列表中删除多个重复元素操作。分享给大家供大家参考,具体如下: 我们以下面这个list为例,删除其中所有值为6的元素: l=[9,6,5,6,6,7,8,9,6,0] 首先尝试remove方法: l.remove(6) ...

    HashMap和List遍历方法及如何遍历删除元素总结

    在本篇文章中小编给大家分享了关于HashMap和List遍历方法及如何遍历删除元素知识点总结,需要的朋友们参考下。

    40道java集合面试题含答案(很全很详细)

    Collection接口继承自Iterable接口,这意味着可以通过for-each循环遍历集合元素。 List接口是有序的集合,可以包含重复的元素。List接口提供了按照索引位置访问元素的方法,以及添加、删除和修改元素的操作。List...

    Java集合框架Collection接口.pdf

    其中Collection接口是Java集合框架的基础接口之一,定义了一些基本的集合操作,包括添加元素、删除元素、遍历集合等。在这里,我将为您详细介绍Java集合框架中的Collection接口。 Collection接口是Java集合框架中的...

    Python代码实现删除一个list里面重复元素的方法

    方法二:是用set(),set是定义集合的,无序,非重复 方法三:是排序后,倒着扫描,遇到已有的元素删之 #!/usr/bin/python #coding=utf-8 ''' Created on 2012-2-22 Q: 给定一个列表,去掉其重复的元素,并输出 ''' ...

    ArrayList删除集合中某一属性相同的元素方法(推荐)

    下面小编就为大家带来一篇ArrayList删除集合中某一属性相同的元素方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    去除链表重复元素-Java 实现

    附件是Java 实现的去除链表重复元素。...printList方法用于打印链表中的所有元素。在Main类中,我们创建了一个包含重复元素的链表,调用removeDuplicates方法去除重复元素,并打印出处理前后的链表。

    Python中的list与tuple集合区别解析

    Python中内置了list集合与tuple集合,在list集合中可以实现元素的添加、修改、插入、以及删除。tuple集合看似与list类似,但两者还是有很大的区别。 在tuple集合中,一旦元素被存储,以后就不能修改,删除了,这比...

    详解python中list的使用

    1、list(列表)是一种有序的集合,可以随时添加、修改、删除其中的元素。 举例:listClassName = [‘Jack’,’Tom’,’Mark’] 列表可以根据索引获取元素,如:listClassName[0] : 列表索引是从0开始的,最后一个...

    Arduino-List:实现动态数组的Arduino库

    Arduino列表库Arduino库,实现了一个动态大小的数组,即一个可以添加或删除元素的集合,并且该集合根据存储的元素数量来增加或减少其容量。 更多信息使用说明List类的操作与C ++中的Vector类相似,但是其实现方式很...

    Python实现去除列表中重复元素的方法小结【4种方法】

    本文实例讲述了Python实现去除列表中重复元素的方法。分享给大家供大家参考,具体如下: 这里一共使用了四种方法来去除列表中的重复元素,下面是具体实现: #!usr/bin/env python #encoding:utf-8 ''' __Author__:...

    Java中的List集合

    1 Java中的List集合 1.1 迭代器 通过集合对象获取对应的Iterator迭代器  Iterator iterator(); 常用方法:  boolean hasNext();  判断当前Iterator是否可以继续运行。  E next();  获取Iterator当前指向元素,...

    List、Set、Map的特点及遍历方法

    List、Set、MapList与Set集合的区别List、Map、Set三个接口,存取元素时,各有什么特点SetListMapList、Set、Map遍历的实现先来个Employee实体类List遍历的三种方式Set遍历的两种方式Map的几种遍历 List与Set集合的...

Global site tag (gtag.js) - Google Analytics