`
javaG
  • 浏览: 554541 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ArrayList遍历的同时删除

阅读更多

方法一

ArrayList<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add("two");
        list.add("two");
        list.add("two");
        for(int i=0;i<list.size();i++){
            if(list.get(i).equals("two")){
                list.remove(i);
            }
        }
        System.out.println(list);

 结果:

[one, two, two]

 方法二

        ArrayList<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add("two");
        list.add("two");
        list.add("two");
        for(String s:list){
            if(s.equals("two")){
                list.remove(s);
            }
        }
        System.out.println(list);

 

结果:

Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
	at java.util.AbstractList$Itr.next(AbstractList.java:343)
	at Test.main(Test.java:22)

 

方法三:

        ArrayList<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add("two");
        list.add("two");
        list.add("two");
        Iterator<String> iter = list.iterator();
        while(iter.hasNext()){
            String s = iter.next();
            if(s.equals("two")){
                iter.remove();
            }
        }
        System.out.println(list);

结果:

[one]

 

结论:

删除还是用迭代器的比较好,其它的都会有问题.

 

 

 

分享到:
评论
3 楼 ymm8505 2015-12-15  
我自己的理解  CopyOnWriteArrayList 这个类就是 针对集合遍历删除诞生的,并且还是并发安全的。     并且在读多、修改少的情况下 效率高于ArrayList
2 楼 netwelfare 2015-04-18  
文章讲解的不够详细,ArrayList在遍历的同时如果去删除或者增加元素,很容易出现问题的,这篇文章讲解的很清楚:ArrayList循环遍历并删除元素的常见陷阱
1 楼 287854442 2010-08-02  
恩 正解 还有一种办法 就是直接用for循环 如果符合条件就删除 然后再让循环变量i--
不过还是用Iterator优雅。

相关推荐

    Java ArrayList遍历修改代码实例解析

    然而,在遍历 ArrayList 时,如果需要删除某些元素,可能会遇到 ConcurrentModificationException 异常。今天,我们将讨论如何正确地遍历和修改 ArrayList。 遍历 ArrayList 的正确方法 在遍历 ArrayList 时,不能...

    java arrayList遍历的四种方法及Java中ArrayList类的用法

    - 遍历ArrayList时,使用迭代器通常比索引遍历效率更高,因为迭代器避免了对size()的重复计算。 - 对于大规模数据的增删操作,考虑使用LinkedList,因为ArrayList的插入和删除操作在中间位置时效率较低。 了解并...

    jni操作arraylist对象

    ArrayList通过数组来存储元素,因此可以快速访问任意位置的元素,但插入和删除元素时可能需要移动其他元素,这可能导致性能下降。 在JNI中操作ArrayList,我们需要做以下几步: 1. **创建JNI函数**:在C/C++代码中...

    java迭代器模式实现正反向遍历

    - `ConcreteAggregate`类使用`LinkedList`作为其内部数据结构,因为`LinkedList`提供了快速的插入和删除操作,这在迭代器模式中可能不那么关键,但在其他场景下可能是有益的。 - 在主类`Client`中,首先创建了一个`...

    C# 集合对象遍历性能测试

    ArrayList的优点在于其灵活性,可以存储任意类型的对象,但缺点是插入和删除元素时可能需要进行大量的元素移动,这在遍历过程中会影响性能。 其次,`Dictionary, TValue&gt;`是一个键值对的集合,基于哈希表实现。它的...

    java集合类遍历的同时如何进行删除操作.docx

    在Java编程中,集合类遍历的同时进行删除操作是一个常见的需求,但如果不正确地执行,可能会导致`ConcurrentModificationException`。这个问题主要出现在迭代器正在遍历集合时,集合本身被修改的情况。以下是对这个...

    java数组遍历 删除remove(示例代码)

    总结来说,这个示例展示了如何在Java中创建一个包含自定义对象的ArrayList,如何向ArrayList中添加和删除元素,以及如何安全地遍历ArrayList并访问其元素。在实际开发中,了解这些基本操作对于处理动态数据集至关...

    jstl 遍历_jstl遍历_

    `&lt;c:forEach&gt;`标签用于遍历任何可迭代的数据源,如ArrayList、LinkedList、HashMap等。其基本语法如下: ```jsp &lt;!-- 在这里处理每项元素 --&gt; ``` - `items`:指定要遍历的集合或数组。 - `var`:定义一个变量...

    JavaScript 实现基础 ArrayList 功能

    首先,我们需要创建一个ArrayList类,这个类将包含添加、删除、查找、更新和遍历元素等基本操作。由于JavaScript的Array对象已经提供了这些功能,我们可以通过扩展Array原型来创建ArrayList。 ```javascript ...

    Java中ArrayList的removeAll方法详解

    同时,优化的方法也使用了迭代器遍历ArrayList中的元素,而不是使用循环遍历。这也提高了方法的执行速度。 ArrayList的removeAll方法是一个非常有用的集合操作方法,但是需要 thận重使用,以免导致性能问题。在...

    ArrayList类操作程序实例

    六、遍历ArrayList 1. for-each循环:`for (E e : list) { ... }` 2. Iterator迭代器:`Iterator&lt;E&gt; iterator = list.iterator(); while (iterator.hasNext()) { E e = iterator.next(); ... }` 七、ArrayList的...

    ASP .NET - ArrayList对象

    ArrayList对象是一个非常基础且灵活的集合类,它允许程序员在运行时添加、删除和访问元素,而无需预先确定数组的大小。下面将详细介绍ArrayList对象的特性、操作方法以及在实际开发中的应用。 1. ArrayList对象的...

    day09-ArrayList集合&学生管理系统.pdf

    通过上述知识点的学习,我们可以掌握ArrayList集合的基本使用,包括创建集合、添加、删除、修改以及遍历集合元素等操作,能够针对具体的需求来编写相应的Java程序代码。此外,使用泛型来约束集合中的数据类型是提高...

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

    **错误的遍历删除方式** 错误的示例代码如下: ```java Set&lt;CheckWork&gt; set = this.getUserDao().getAll().get(0).getActionCheckWorks(); for (CheckWork checkWork : set) { if (checkWork.getState() == 1) { ...

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

    然而,在遍历过程中直接修改`ArrayList`(如删除元素)可能会引发`IndexOutOfBoundsException`等异常。 #### 错误示例分析 以下是一种常见的错误操作方式: ```java for (int i = 0; i (); i++) { if (list.get...

    Java自学视频教程-JavaSE基础-常用API-07、ArrayList案例:遍历删除、存对象、元素搜索.mp4

    Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既...

    学生管理系统(使用ArrayList)

    5. 显示所有学生信息:遍历ArrayList并打印每个学生的属性。 6. 学生排序:使用Collections工具类的`sort()`方法,可以对ArrayList进行排序,如按照学号升序排列。 在实践中,为了提高代码的可读性和可维护性,我们...

    ArrayList的实现原理

    - **遍历**:遍历ArrayList的元素效率高,因为可以通过索引直接访问。 总结来说,ArrayList是Java中一个重要的动态数组实现,它的优点在于提供了高效的随机访问和修改,但在插入和删除元素时,特别是当元素位于...

    从原码解析ArrayList

    在多线程环境下,如果一个线程正在遍历ArrayList,而另一个线程同时修改了ArrayList的结构(例如添加或删除元素),可能会导致两种不同的行为。"安全失败"允许遍历继续,但返回的结果可能不正确,因为遍历的是...

Global site tag (gtag.js) - Google Analytics