java中集合删除元素的两种常用方式及新手易错
来源:互联网 发布:java pointer 编辑:程序博客网 时间:2024/06/05 09:49
java中集合删除元素的两种常用方式及新手易错:
创建集合:
ArrayList<String> aList = new ArrayList<String>();aList.add("a");aList.add("b");aList.add("c");aList.add("abc");aList.add("abc");aList.add("abc");aList.add("eye");aList.add("opp");aList.add("abc");
1、第一种删除方式(利用for循环删除):
for (int i = 0; i < aList.size(); i++) {if ("abc".equals(aList.get(i))) {aList.remove(i--);// 索引回溯}}
2、第二种删除方法(利用迭代器的remove()方法删除)
ListIterator<String> listIterator = aList.listIterator(); while(listIterator.hasNext()){ String str = listIterator.next(); if ("abc".equals(str)) { //aList.remove(str); // 集合自身的remove()方法删除 listIterator.remove(); //迭代器的remove() 方法删除} }
运行结果:
原集合:a b c abc abc abc eye opp abc 删除后集合:a b c eye opp
1、利用for循环删除时索引没有回溯,导致漏删元素
for(int i = 0 ;i < aList.size(); i++){if("abc".equals(aList.get(i))){aList.remove(i);// 索引回溯}}运行结果:
原集合:a b c abc abc abc eye opp abc 删除后集合:a b c abc eye opp
2、使用迭代器循环删除元素时,没有利用迭代器remove方法删除元素而是利用集合自身的remove方法删除元素,
这样会导致“并发修改异常错误”
ListIterator<String> listIterator = aList.listIterator(); while(listIterator.hasNext()){ String str = listIterator.next(); if ("abc".equals(str)) { aList.remove(str); // 集合自身的remove()方法删除} }运行结果:
原集合:a b c abc abc abc eye opp abc 删除后集合:Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(Unknown Source)at java.util.ArrayList$Itr.next(Unknown Source)at practice_2.Mianpractice2.main(Mianpractice2.java:42)
并发修改异常错误的产生是因为在生成迭代器后迭代器就已经确定了集合的长度size了,而后集合删除元素后集合的size变小,但是迭代器任然记录的是之前的size数据在迭代过程中产生并发修改异常ConcurrentModificationException,但是如果是使用迭代器的remove()方法来删除元素的话则不会产出这个问题,因为迭代器中的cursor能够自动适应元素删除后集合大小的变化;
所以在删除集合元素时,如果适应迭代器来循环集合元素一定要使用迭代器自身的remove()方法来删除元素;
0 0
- java中集合删除元素的两种常用方式及新手易错
- Java中集合循环删除元素的问题
- java中集合中删除特定元素
- Java中集合排序的两种方法
- java中集合输出的四种方式
- JAVA 中集合的区别及应用
- Java中集合删除元素时候关于ConcurrentModificationException的迷惑点
- java中集合的基本添加删除操作
- java中集合之间的运算优雅方式
- JAVA 中集合的框架和常用的方法总结
- java中集合的知识点
- java中集合的遍历
- java中集合的总结
- java中集合的分类
- Java中集合的讲解
- java中集合的总结
- java中集合的概念
- java中集合的特点
- ResultSet 状态详解
- eclipse在线安装PMD
- 动画
- 数据库中外键的作用
- 客户端跳转与服务器端跳转的区别
- java中集合删除元素的两种常用方式及新手易错
- hdu 2069 普通母函数 +dp
- makefile教程
- 关于Android Studio里的Gradle文件
- Dialog源码分析
- C++结构体对齐和位域
- 第13节--神经网络算法
- windows平台下基于VisualStudio的Clang安装和配置
- SurfaceView播放视频的截图