如何删除JAVA集合中的元素

简介:
文/陈刚 2005-12-05 

经常我们要删除集合中的某些元素。有些可能会这么写。
   
  public void operate(List list){
        for (Iterator it = list.iterator(); it.hasNext();) {
            String str =  (String)it.next();
            if (str.equals("chengang")){
                list.remove(str);
            }
        }
    }
   
  这种写法一运行就会报如下异常:
 
Exception in thread "main" java.util.ConcurrentModificationException
 at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
 
  因为list在循环中的时候是不可以删除它的元素的。后来我是这样做的,一种很笨的方法,思路是这样的:创建一个List专门存放要被删除的元素,循环过后,用List.removeAll方法把元素删除。代码如下:
    public void operate(List list){
        List removeList= new ArrayList();
        for (Iterator it = list.iterator(); it.hasNext();) {
            String str =  (String)it.next();
            if (str.equals("chengang")){
                removeList.add(str);
            }
        }
        list.removeAll(removeList);
    }
  这样也确实可以解决问题了,但是方法实在太笨重,其实可以有更简单的更高效的方法,就是用Iterator.remove方法,如下:
        for (Iterator it = list.iterator(); it.hasNext();) {
            String str =  (String)it.next();
            if (str.equals("chengang")){
                it.remove();
            }
        }
 
 所以,你对Java的基础知识了解越多,代码就会写得越简洁。相反如果你的代码特别复杂,则方法或设计一定有问题。

posted on 2006-03-02 14:02 陈刚 阅读(3125) 评论(2)  编辑  收藏 所属分类: Java

33195.html?webview=1

评论

# re: 如何删除JAVA集合中的元素  回复  更多评论   

用下标操作就行了,写这么多.
2008-03-25 17:59 | 

# re: 如何删除JAVA集合中的元素  回复  更多评论   

这个函数本身执行是不会 报错的. 
你可能是这样的调用过程报的上面那个错 
过程1: 
........ 
Iterator it=list.iterator(); 
operate(list); 
while(it.hasNext()){ 
System.out.println(it.next()); 

............................... 
这样确实会报上面那个错误: 
Exception in thread "main" java.util.ConcurrentModificationException 
at java.util.AbstractList$Itr.checkForComodification(Unknown Source) 
at java.util.AbstractList$Itr.next(Unknown Source) 
at yingwu.test.all.DeleteFromList.main(DeleteFromList.java:30) 

..................................... 
是因为前面的Iteater引用了这个元素,但被删了. 
正确的过程应该是:2 
过程2: 
.......... 
operate(list); 
Iterator it=list.iterator(); 
while(it.hasNext()){ 
System.out.println(it.next()); 
目录
相关文章
|
3天前
|
Java
java8使用stream查找重复元素
java8使用stream查找重复元素
13 2
|
3天前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
8 1
|
3天前
|
存储 消息中间件 算法
Java中的集合框架详解:List、Set、Map的使用场景
Java中的集合框架详解:List、Set、Map的使用场景
|
3天前
|
Java
java使用Stream流找出集合对象中最小值
java使用Stream流找出集合对象中最小值
9 1
|
4天前
|
缓存 Java 测试技术
探讨Java中遍历Map集合的最快方式
探讨Java中遍历Map集合的最快方式
7 1
|
4天前
|
Java API
探讨Java集合的组内平均值计算
探讨Java集合的组内平均值计算
6 1
|
8天前
|
存储 算法 安全
深入理解Java集合框架:基础类型与代码效率优化
Java集合框架是编程的核心工具,包括List、Set、Queue和Map接口及多种实现类,如ArrayList、LinkedList、HashSet、TreeSet等。理解它们的内部机制有助于优化代码。选择适合的集合类型、避免类型转换、使用并发集合和管理容量可以提升效率。深入学习这些概念能改善代码性能和可维护性。
|
1天前
|
存储 Java 容器
【JAVA集合篇 - LinkedList】你真的了解LinkedList吗?
【JAVA集合篇 - LinkedList】你真的了解LinkedList吗?
6 0
|
1天前
|
Java
【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?
【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?
2 0
|
2天前
|
并行计算 Java API
Java List集合取交集的八种不同实现方式
Java List集合取交集的八种不同实现方式