arraylist的remove()循环删除问题
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()循环删除问题相关推荐
- ArrayList中remove()方法删除元素之后下标重定位的问题
需求: 有一个ArrayList数组,要求删除长度大于5的字符串,如:arr = {"ab1","123ad","bca","da ...
- java利用循环打印AVA_ava.util.ArrayList在foreach循环遍历时可以删除元素
ArrayList是java开发时非常常用的类,常碰到需要对ArrayList循环删除元素的情况.这时候大家都不会使用foreach循环的方式来遍历List,因为它会抛java.util.Concur ...
- JAVA中循环删除集合中元素的方法总结
一.list集合循环删除元素 1.通过普通的for删除删除符合条件的多个元素 for(int i=0;i<list.size();i++){if(list.get(i).equals(" ...
- JAVA中循环删除集合中元素的方法
使用Iterator的方式可以顺利删除和遍历 Iterator<String> it = list.iterator(); while(it.hasNext()){String x = i ...
- Java码农必须掌握的循环删除List元素的正确方法
转载自 Java码农必须掌握的循环删除List元素的正确方法 首先看下下面的各种删除list元素的例子 public static void main(String[] args) {List< ...
- java list 范围删除_JAVA中循环删除list中元素(移除list两时间范围外的元素)
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...
- Java循环删除集合多个元素的正确打开方式
首先说下不正确的打开方式: 第一:使用for循环删除集合的元素,示例代码如下 1 ArrayList<String> list = new ArrayList<String>( ...
- Java中如何循环删除一个集合(如List)中的多个元素
今天我需要从一个java的集合中,根据另一个集合的内容,删除第一个集合中不特定的元素.这看上去非常简单,但却遇到了问题.这就是"Java中如何删除一个集合中的多个元素"的问题. 这 ...
- [ArrayList删除元素] 你需要了解的ArrayList如何安全的删除重复元素/ list去重
学习笔记使用 ArrayList特点:动态数组结构,元素有序,可重复的一个集合 import java.util.ArrayList; import java.util.Iterator; impor ...
最新文章
- 报错处理: syntax error near unexpected token `$‘\r‘‘ (linux中的^M)
- 技术面试官告诉你面试应该怎么准备?
- 你被这些网络迷题难倒过吗?
- 怎么测试服务器的性能,如何测试服务器性能
- Python之数据分析(figure图形对象、Numpy连线特殊点、图像多元布局)
- mysql可以复用删除的记录吗_MySQL学习(八)删除表数据
- 奔腾4 2.4CPU计算机硬件能升级吗,CPU怎么升级啊
- 【mybatis深度历险系列】mybatis中的动态sql
- Docker安装(有网环境下) 最新版docker-ce安装教程
- WGS84与GCJ02经纬度坐标转换介绍
- 微信开发------微信公众号新老账户粉丝迁移问题
- cmd 控制台 提示:请求的操作需要提升!
- 「解决方案」Acrel-2000Z变电站综合自动化系统
- python 向已有excel写数据_将数据写入已有的excel文件并制作汇总页签
- COMSOL列管反应器模拟(包括多孔介质催化剂、化学反应、对流扩散、传热和对流换热)
- 毕业五年决定你的一生
- 一篇文章梳理清楚 Python 多线程与多进程
- python 密度图_Python-Matplotlib做二维密度分布图
- 在线商城前台开发环境配置
- LIVE555(1)
热门文章
- ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignored
- mybatis 之 parameterType=list1
- atime、mtime、ctime
- Light OJ Dynamic Programming
- Select的onchange事件
- 自动为数字千位数,百万位数添加逗号
- 技术检验检测管理系统之样品检验模块概况(四)
- 卷积神经网络的参数量和计算量
- Dijkstra算法【模板】
- Linux系统-小倒腾之Linux DIY定制裁剪(New kernel+Busybox)o_o(二)