原文网址:http://javag.iteye.com/blog/403097

方法一

  1. ArrayList<String> list = new ArrayList<String>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("two");
  6. list.add("two");
  7. for(int i=0;i<list.size();i++){
  8. if(list.get(i).equals("two")){
  9. list.remove(i);
  10. }
  11. }
  12. System.out.println(list);

结果:

  1. [one, two, two]

方法二

  1. ArrayList<String> list = new ArrayList<String>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("two");
  6. list.add("two");
  7. for(String s:list){
  8. if(s.equals("two")){
  9. list.remove(s);
  10. }
  11. }
  12. System.out.println(list);

结果:

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

方法三:

  1. ArrayList<String> list = new ArrayList<String>();
  2. list.add("one");
  3. list.add("two");
  4. list.add("two");
  5. list.add("two");
  6. list.add("two");
  7. Iterator<String> iter = list.iterator();
  8. while(iter.hasNext()){
  9. String s = iter.next();
  10. if(s.equals("two")){
  11. iter.remove();
  12. }
  13. }
  14. System.out.println(list);

结果:

  1. [one]

结论:

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

【转】ArrayList遍历的同时删除----不错的更多相关文章

  1. ArrayList遍历的同时删除--- 删除还是用迭代器的比较好,其它的都会有问题.

    http://javag.iteye.com/blog/403097 ArrayList遍历的同时删除-- 删除还是用迭代器的比较好,其它的都会有问题.     博客分类: 随笔 Javathread ...

  2. 【原理探究】女朋友问我ArrayList遍历时删除元素的正确姿势是什么?

    简介 我们在项目开发过程中,经常会有需求需要删除ArrayList中的某个元素,而使用不正确的删除方式,就有可能抛出异常.或者在面试中,会遇到面试官询问遍历时如何正常删除元素.所以在本篇文章中,我们会 ...

  3. Java动态 遍历List 时删除List特征元素 异常问题 及解决方案总结

    首先.这是一个极其简单的问题,大牛可忽略.新手可能会遇到,Java中遍历某个List 时删除该List元素 会抛出异常. 这一个简单的问题再高手严重不值一提,但新手可能会比較困惑,用哪种方式能够安全有 ...

  4. 遍历List集合删除元素的出现报错

    遍历List集合删除元素的出现报错   遍历List集合删除元素的时候会发生索引越界异常或内容遍历不全等问题. 例子: List<String> al = new ArrayList< ...

  5. C#遍历List并删除某个或者几个元素的方法

    C#遍历List并删除某个或者几个元素的方法,你的第一反应使用什么方法实现呢?foreach? for? 如果是foreach,那么恭喜你,你答错了.如果你想到的是用for,那么你只是离成功进了一步. ...

  6. C++容器在遍历时的删除问题

    容器是非常便捷常用的,经常用容器来存储多条数据,然后对数据进行增删查改. 有时要在遍历的同时删除一条数据,但是这样删除的时候程序会导致程序崩溃. 这个问题在GCC 中不会出现,而在VS2008,VS2 ...

  7. Python的list循环遍历中,删除数据的正确方法

    在遍历list,删除符合条件的数据时,总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_lis ...

  8. python 遍历list并删除部分元素

    python 遍历list并删除部分元素https://blog.csdn.net/afgasdg/article/details/82844403有两个list,list_1 为0-9,list_2 ...

  9. ArrayList遍历的三种方式 array arrayList转换

    ArrayList遍历的三种方式 - 呵呵静 - 博客园 https://www.cnblogs.com/mjyung/p/6725182.html

随机推荐

  1. bt5全称是Back Track five,是继BT3,BT4之后的最新版,这是一个linux环境的便携系统,可以放到U盘或者硬盘中启动,对本身硬盘没有影响,无需在本地安装。

    是圈内非常著名的黑客攻击平台,是一个封装好的Linux操作系统,内置大量的网络安全检测工具以及黑客破解软件等. Back Track因可以方便的破解无线网络而出名,其中内置的spoonwep2是一个非 ...

  2. db2 存储过程迁移方法

    大家在迁移数据库时,存储过程一般也要迁移过去,但一般有两个问题: 1. 非常多存储过程有先后关系(存储过程调用存储过程),假设存储过程数量少,还能手动操作.假设量大,那真是要疯了. 2. 存储过程过大 ...

  3. Windows下搭建MySQL Master Slave[转]

    Windows下搭建MySQL Master Slave 一.背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用k ...

  4. Haskell之Yesod开发–边踩坑边开发(2)

    今天继续上一节的开发 今天我们须要详细的开发一个图书馆站点,分为下面几个页面 / HomeR GET 主页 /login LoginR GET 用户登录页面 /library LibraryR GET ...

  5. Freemarker常用技巧(三)

    freemarker模板解析过程 例如:一个freemarker表达式<body> ${hello} </body>,会被解析成三个部分,分别是<body>${he ...

  6. hdu 2689

    hdu 2689 超级大水题....两种代码都过了,开始以为n^2会tle,后来竟然过了...汗 注意下cin写在while里面,就可以了 #include <iostream> usin ...

  7. 开源CMS建站项目DNN研究与心得

    DNN (Dotnetnuke) 首先是开源的,并且采用BSD开源协议,也就是说你可以任意修改源代码.传播.作为商品出售,仅有的要求就是保留源代码中的版权文字,这就解决了我多年来的心病:我知道动网新闻 ...

  8. DELL R410升级网卡驱动

    官方链接http://zh-cn.broadcom.com/support/ethernet_nic/netxtremeii.php(官方驱动的名字偶尔会改)   注意确保服务器的kernel-dev ...

  9. MultipeerConnectivity

    Multipeer connectivity是一个使附近设备通过Wi-Fi网络.P2P Wi-Fi以及蓝牙个人局域网进行通信的框架.互相链接的节点可以安全地传递信息.流或是其他文件资源,而不用通过网络 ...

  10. 拿起cl.exe,放下IDE

    笔者在这里介绍一种使用cl.exe编译源文件的方法,可以手动执行编译过程而不再依赖IDE,此外,笔者还介绍一些使用cl.exe编译简单源代码的方式. cl.exe是windows平台下的编译连接程序, ...