arraylist的remove()循环遍历删除报错:
ava ConcurrentModificationException 异常
原因是list其中的数据被删除,索引-1;导致循环到最后时越界。

package com.jmdf.test;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;public class test {public static void main(String[] args) {System.out.println("----------①迭代器删除元素3-----------------");for_list1();System.out.println("-----------②新建中间集合删除元素3----------------");for_list2();System.out.println("----------③CopyOnWriteArrayList删除元素3-----------------");for_list3();System.out.println("-----------④修改索引计数删除元素3----------------");for_list4();}public static void for_list1(){List<String> list1 = new ArrayList<>();list1.add( "1");list1.add( "2");list1.add( "3");list1.add( "4");list1.add( "5");// 1 使用Iterator提供的remove方法,用于删除当前元素Iterator<String> iterator = list1.iterator();while(iterator.hasNext()){String value = iterator.next();if(value.equals( "3"))iterator.remove();   //注意这个地方}System. out.println( "List Value1:" + list1.toString());}public static void for_list2(){List<String> list2 = new ArrayList<String>();list2.add( "1");list2.add( "2");list2.add( "3");list2.add( "4");list2.add( "5");// 2 建一个集合,记录需要删除的元素,之后统一删除List<String> templist = new ArrayList<String>();for (String value : list2) {if (value.equals( "3")) {templist.add(value);}}// 可以查看removeAll源码,其中使用Iterator进行遍历list2.removeAll(templist);System. out.println( "List Value2:" + list2.toString());}public static void for_list3(){List<String> list = new CopyOnWriteArrayList<String>();list.add( "1");list.add( "2");list.add( "3");list.add( "4");list.add( "5");Iterator<String> it = list.iterator();while (it.hasNext()) {String value = it.next();if (value.equals( "3")) {list.remove( "3");}}System. out.println( "List Value3:" + list.toString());}public static void for_list4(){List<String> list4 = new ArrayList<String>();list4.add( "1");list4.add( "2");list4.add( "3");list4.add( "4");list4.add( "5");// 4. 不使用Iterator进行遍历,需要注意的是自己保证索引正常for ( int i = 0; i < list4.size(); i++) {String value = list4.get(i);System. out.println( "List Value:" + value);if (value.equals( "3")) {list4.remove(value);  // oki--; // 因为位置发生改变,所以必须修改i的位置}}System. out.println( "List Value4:" + list4.toString());}}

arraylist的remove()循环删除问题相关推荐

  1. ArrayList中remove()方法删除元素之后下标重定位的问题

    需求: 有一个ArrayList数组,要求删除长度大于5的字符串,如:arr = {"ab1","123ad","bca","da ...

  2. java利用循环打印AVA_ava.util.ArrayList在foreach循环遍历时可以删除元素

    ArrayList是java开发时非常常用的类,常碰到需要对ArrayList循环删除元素的情况.这时候大家都不会使用foreach循环的方式来遍历List,因为它会抛java.util.Concur ...

  3. JAVA中循环删除集合中元素的方法总结

    一.list集合循环删除元素 1.通过普通的for删除删除符合条件的多个元素 for(int i=0;i<list.size();i++){if(list.get(i).equals(" ...

  4. JAVA中循环删除集合中元素的方法

    使用Iterator的方式可以顺利删除和遍历 Iterator<String> it = list.iterator(); while(it.hasNext()){String x = i ...

  5. Java码农必须掌握的循环删除List元素的正确方法

    转载自 Java码农必须掌握的循环删除List元素的正确方法 首先看下下面的各种删除list元素的例子 public static void main(String[] args) {List< ...

  6. java list 范围删除_JAVA中循环删除list中元素(移除list两时间范围外的元素)

    印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...

  7. Java循环删除集合多个元素的正确打开方式

    首先说下不正确的打开方式: 第一:使用for循环删除集合的元素,示例代码如下 1 ArrayList<String> list = new ArrayList<String>( ...

  8. Java中如何循环删除一个集合(如List)中的多个元素

    今天我需要从一个java的集合中,根据另一个集合的内容,删除第一个集合中不特定的元素.这看上去非常简单,但却遇到了问题.这就是"Java中如何删除一个集合中的多个元素"的问题. 这 ...

  9. [ArrayList删除元素] 你需要了解的ArrayList如何安全的删除重复元素/ list去重

    学习笔记使用 ArrayList特点:动态数组结构,元素有序,可重复的一个集合 import java.util.ArrayList; import java.util.Iterator; impor ...

最新文章

  1. 报错处理: syntax error near unexpected token `$‘\r‘‘ (linux中的^M)
  2. 技术面试官告诉你面试应该怎么准备?
  3. 你被这些网络迷题难倒过吗?
  4. 怎么测试服务器的性能,如何测试服务器性能
  5. Python之数据分析(figure图形对象、Numpy连线特殊点、图像多元布局)
  6. mysql可以复用删除的记录吗_MySQL学习(八)删除表数据
  7. 奔腾4 2.4CPU计算机硬件能升级吗,CPU怎么升级啊
  8. 【mybatis深度历险系列】mybatis中的动态sql
  9. Docker安装(有网环境下) 最新版docker-ce安装教程
  10. WGS84与GCJ02经纬度坐标转换介绍
  11. 微信开发------微信公众号新老账户粉丝迁移问题
  12. cmd 控制台 提示:请求的操作需要提升!
  13. 「解决方案」Acrel-2000Z变电站综合自动化系统
  14. python 向已有excel写数据_将数据写入已有的excel文件并制作汇总页签
  15. COMSOL列管反应器模拟(包括多孔介质催化剂、化学反应、对流扩散、传热和对流换热)
  16. 毕业五年决定你的一生
  17. 一篇文章梳理清楚 Python 多线程与多进程
  18. python 密度图_Python-Matplotlib做二维密度分布图
  19. 在线商城前台开发环境配置
  20. LIVE555(1)

热门文章

  1. ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignored
  2. mybatis 之 parameterType=list1
  3. atime、mtime、ctime
  4. Light OJ Dynamic Programming
  5. Select的onchange事件
  6. 自动为数字千位数,百万位数添加逗号
  7. 技术检验检测管理系统之样品检验模块概况(四)
  8. 卷积神经网络的参数量和计算量
  9. Dijkstra算法【模板】
  10. Linux系统-小倒腾之Linux DIY定制裁剪(New kernel+Busybox)o_o(二)