当JAVA集合移除自身集合元素时发生的诸多问题
一段代码目的是想删除集合中包含“a”字符串的集合项:
public class TestForeach {public static void main(String[] args){//ArrayList<String> lists = new ArrayList<String>();Collection<String> lists = new HashSet<String>();lists.add("abvd");lists.add("acvd");lists.add("bvd");lists.add("d");lists.add("dfd");lists.add("a");Iterator<String> iter = lists.iterator();while(iter.hasNext()){String s = iter.next();if( s.contains("a") ){lists.remove(s);}}System.out.println(lists);}
}
运行结果:
原因分析:
当不使用Iterator遍历集合元素时:
public class TestForeach {public static void main(String[] args){ArrayList<String> lists = new ArrayList<String>();lists.add("abvd");lists.add("acvd");lists.add("bvd");lists.add("d");lists.add("a");for( int i=0 ; i<lists.size() ; i++){String str = lists.get(i);if(str.contains("a")){//lists.remove(i);lists.remove(str);}}System.out.println(lists);}
}
输出结果:
[acvd, bvd, d]
acvd并没有被删除的原因是:
内存中,当删除了i=0的元素“abvd”时,i++ 而此时lists中i=0的位置变成了“acvd”也就是之前的i=0的下一个元素
解决方案 在删除集合中的元素时 :
① 不要使用 集合对象.remove(int i)/remove(Object o);而应该使用Iterator对象的remove方法或者在移除对象后将游标i-1。
原因:
iterator中的remove方法:
②如果只删除一个元素,可以forin语句删除元素后,通过break跳出循环
③使用解决这类异常线程安全集合 CopyOnWriteArrayList<E>
当JAVA集合移除自身集合元素时发生的诸多问题相关推荐
- 扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
在我们对一个dom添加mouseover和mouseout时,也就是jquery的hover事件,如果该dom有子元素,鼠标移到子元素时会触发mouseout事件,但往往实际情况我们希望在子元素上不触 ...
- Java之集合(最全集合相关知识)
集合 集合 一.集合概述 1.为什么要学习集合? 2.定义 3.说明 4.注意 5.集合分类 5.1 单列集合Collection 5.2 双列集合Map 二.Collection接口 1.相关方法 ...
- 如何在Java中处理ConcurrentModificationException? 在循环中从ArrayList中删除元素时要当心...
从Java中从ArrayList中删除元素时常见的问题之一是ConcurrentModificationException. 如果您对索引使用经典的for循环或增强的for循环,并尝试使用remove ...
- Java集合移除某个元素
目录 一.fori移除 二.加强for 三.Iterator 四.JDK8写法 一.fori移除 public static void main(String[] args) {test1();}pr ...
- java map移除key为空_Java实现过滤掉map集合中key或value为空的值示例
本文实例讲述了Java实现过滤掉map集合中key或value为空的值.分享给大家供大家参考,具体如下: import java.util.Collection; import java.util.H ...
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...
1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...
- Java中如何取出Map集合中的元素
Java的Map集合中没有迭代器,需要将其转换为set集合 /*map集合的两种取出方式:1,SetkeySet:将map中所有的键存入到Set集合.因为set具备迭代器. 所有可以迭代方式取出所有的 ...
- Java集合如何遍历删除指定元素
目录 1.删除List 2.删除Set 3.删除Map 注意事项: 1.删除List public class ListDemo {public static void main(String[] a ...
- list集合移除指定元素
场景:使用for循环删除集合中的指定元素 定义一个list集合,并添加数据: List<String> list=new ArrayList<>();list.add(&quo ...
最新文章
- 大数据+人工智能正以八种方式撼动商界
- Spring boot(五)模板引擎 Thymeleaf
- Matplot的常见问题
- vmstat使用简介各种linux命令使用
- DB Stack Overflow
- myeclipse 下搭建测试环境
- 为什么redhat6/centos6里看到的网卡是em*?
- 如何使用初始化列表消除冗余C++代码
- python黑帽子学习中的疑难-(一)取代netcat
- 色散方程用matlab编译,急切求助用matlab曲线拟合色散方程 - 程序语言 - 小木虫 - 学术 科研 互动社区...
- 初学CSS,美化一个属于你自己的网页
- 百练_3709:2进制转化为3进制
- 如何查看历史卫星影像图
- 小布机器人怎么断网_华硕“小布”智能机器人上手体验:造型呆萌可爱 全年龄段适用...
- 使用JavaScript使浏览器进入全屏或退出全屏
- 《深度学习之PyTorch物体检测实战》—读书笔记
- word 模板的位置
- 有关PHP文档生成工具---PHPDocumentor
- uiautomator2+python3,实现手机解锁,以及软件登录
- R语言 trim=0.1 tirm=0.2 什么意思呢?
热门文章
- Android 简易的自定义确认弹框AlertDialog
- CSI笔记【6】:Guaranteeing spoof-resilient multi-robot networks论文阅读
- PIC以太网开发板——基于微芯最新ENC28J60以太网控制器
- win10+ubuntu18.04lts:在已安装win10环境中利用EasyBCD引导安装Ubuntu
- 单片机编程软件很简单(22),keil单片机编程软件优化等级+概念解析
- H---RGB色彩图像分析
- iphone免越狱插件_如何保护iPhone免受盗贼的侵害
- drf 获取域名+端口_如何注册域名(+简单提示可免费获取)
- css_flex-grow增长系数/可用空间分配_实例
- python深度优先搜索传教士和野人_ai1 带回溯的深度优先策略:解决经典野人传教士过河问题的求解:三个修道士和三个野人过河 - 下载 - 搜珍网...