`
javaG
  • 浏览: 550051 次
  • 性别: 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自学视频教程-JavaSE基础-常用API-07、ArrayList案例:遍历删除、存对象、元素搜索.mp4

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

    【Java面试题】List如何一边遍历,一边删除?

    这是最近面试时被问到的1道面试题,本... List platformList = new ArrayList(); platformList.add("博客园"); platformList.add("CSDN"); platformList.add("掘金"); for (String platform : platformList) { if

    java遍历特例

    ArrayList&lt;String&gt; list = new ArrayList(); HashMap&lt;Object,Object&gt; hash = new HashMap&lt;Object,Object&gt;(); TreeMap&lt;Object,Object&gt; treeMap = new TreeMap&lt;Object,Object&gt;(); ...

    基于jdk1.8 的ArrayList的源码分析

    主要会从ArrayList的构造方法、增加元素、删除元素、获取元素、查询元素、清空元素、判断元素是否存在以及ArrayList的遍历进行入手分析。 一:ArrayList的具体实现 1.1:构造函数 ArrayList list = new ArrayList();...

    java小程序之ArrayList的使用

    作业 10-08 1. 随机产生 20 个整数(10以内的),放入一个ArrayList中, 用迭代器遍历这个ArrayList 2. 并删除其中为 5 的数 3. 再产生 3 个整数,插入到位置 4 处 4. 把所有值为 1 的数都变成 10

    Java基础–为什么ArrayList,Vector等都不支持循环中remove?

    为什么ArrayList,Vector等都不支持循环中remove1 Vector 直接删除2 Vector 遍历元素2.1 for循环遍历2.2 迭代器循环2.3 任意方向遍历2.4 Vector的foreach3. Vector迭代器删除4. Vector不使用迭代器删除元素5. Vector...

    瑟夫死亡游戏代码

    工具用ArrayList 每一次遍历整个队列 计算出总共被杀的人的所有位置 将计算出的位置的所有值设为0;然后将值为零的一次性删除 arrayList remove 0 ;直到队列的长度为1"&gt;n个人围成一个圈 每隔3个人杀一个人 问最后...

    07:ArrayList集合的增删减除.pdf

    增加add,查看下表,遍历,删除值,下标,数组,改下标付值, 度是可变的 length:长度 capacity:容量,capacity不能小于实际内容的值,当你将length变大之后,capacity会自动变大。 2.它的类型是object,---写入和读取...

    ArrayList类&关于列表有用的一些方法.pptx

    掌握对ArrayList类实例的遍历、插入、修改、删除等操作;(重点、难点)11.11 java.util.ArrayList(掌握)存放对象的动态数组,用户可以根据元素的索引访问元素允许放重复的元素,并且允许null元素11.11 ArrayList...

    跟我学Java-day15-学员管理系统.pdf

    5.1 定义一个方法,接收ArrayList集合 5.2 方法中接收要删除学生的学号 5.3 遍历集合,获取 每个学生对象 5.4 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前 学生对象从集合中删除 5.5 在...

    Android如何遍历特定目录下所有文件

    第一个案例为大家分享了Android遍历特定目录下所有文件,包含子目录的,并删除最新创建的。 private boolean deleteLastFromFloder(String path) { boolean success = false; try { ArrayList&lt;File&gt; images = ...

    java并发包&线程池原理分析&锁的深度化

    2.Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢 ...

    ArrayList-LinkedList:ArrayList和LinkedList的完整演示

    ArrayList-LinkedList ArrayList和LinkedList的完整演示。 我们如何添加,删除和遍历列表

    java8源码-csn-list:ArrayList、LinkedList、Vector、Stack源码分析

    java8 源码 List相关实现类的源码解析(JDK1.8) ...通过modCount的值来判断是否多线程同时操作,modCount用来记录List修改的次数:每修改一次(添加/删除等操作),将modCount+1 LinkedList 继承关系: LinkedLis

    数据结构-链表 JAVA语言实现

    数据结构-链表 JAVA语言实现,包含单向链表、双向链表、循环链表的遍历、删除和插入 详细介绍:http://blog.csdn.net/z740852294/article/details/77369439

    Java集合框架List接口.pdf

    而LinkedList是一个基于链表实现的List,它在插入和删除元素时效率比ArrayList高,但是随机访问元素则需要遍历链表,效率较低。 List接口常用的方法 1、void add(int index, E element):在指定索引位置插入元素。 2...

    实验05 Java集合.doc

    3)了解List接口及主要实现类(ArrayList、LinkedList、Vector) 4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名...

    java-collections-comparison:在不同的Java集合实现中进行比较实验,以找出时间与集合大小之间的关系,在检索过程中,从集合中删除元素以及遍历每个集合中的所有元素的过程

    • 抽象的针对不同Java集合实现的比较实验,以找出时间与集合大小之间的关系,以及在检索过程中,从集合中删除元素以及遍历每个集合中的所有元素的过程。 • 方法用数字填充集合,并测量进行散文的时间,然后将结果...

    java-Exe5_1.rar_Exe5_3_exe5_exe5_1_exe5_2_java-Exe5_1

    1. 分别使用Vector、Hashtable、Stack,ArrayList、LinkedList和HashSet作为容器类,实现以下要求: (1) 向容器中添加1,000,000个随机整数。 (2) 遍历容器中的所有元素。 (3) 随机产生100,000个整数,在容器中查找...

Global site tag (gtag.js) - Google Analytics