一段代码目的是想删除集合中包含“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集合移除自身集合元素时发生的诸多问题相关推荐

  1. 扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁

    在我们对一个dom添加mouseover和mouseout时,也就是jquery的hover事件,如果该dom有子元素,鼠标移到子元素时会触发mouseout事件,但往往实际情况我们希望在子元素上不触 ...

  2. Java之集合(最全集合相关知识)

    集合 集合 一.集合概述 1.为什么要学习集合? 2.定义 3.说明 4.注意 5.集合分类 5.1 单列集合Collection 5.2 双列集合Map 二.Collection接口 1.相关方法 ...

  3. 如何在Java中处理ConcurrentModificationException? 在循环中从ArrayList中删除元素时要当心...

    从Java中从ArrayList中删除元素时常见的问题之一是ConcurrentModificationException. 如果您对索引使用经典的for循环或增强的for循环,并尝试使用remove ...

  4. Java集合移除某个元素

    目录 一.fori移除 二.加强for 三.Iterator 四.JDK8写法 一.fori移除 public static void main(String[] args) {test1();}pr ...

  5. java map移除key为空_Java实现过滤掉map集合中key或value为空的值示例

    本文实例讲述了Java实现过滤掉map集合中key或value为空的值.分享给大家供大家参考,具体如下: import java.util.Collection; import java.util.H ...

  6. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...

    1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...

  7. Java中如何取出Map集合中的元素

    Java的Map集合中没有迭代器,需要将其转换为set集合 /*map集合的两种取出方式:1,SetkeySet:将map中所有的键存入到Set集合.因为set具备迭代器. 所有可以迭代方式取出所有的 ...

  8. Java集合如何遍历删除指定元素

    目录 1.删除List 2.删除Set 3.删除Map 注意事项: 1.删除List public class ListDemo {public static void main(String[] a ...

  9. list集合移除指定元素

    场景:使用for循环删除集合中的指定元素 定义一个list集合,并添加数据: List<String> list=new ArrayList<>();list.add(&quo ...

最新文章

  1. 大数据+人工智能正以八种方式撼动商界
  2. Spring boot(五)模板引擎 Thymeleaf
  3. Matplot的常见问题
  4. vmstat使用简介各种linux命令使用
  5. DB Stack Overflow
  6. myeclipse 下搭建测试环境
  7. 为什么redhat6/centos6里看到的网卡是em*?
  8. 如何使用初始化列表消除冗余C++代码
  9. python黑帽子学习中的疑难-(一)取代netcat
  10. 色散方程用matlab编译,急切求助用matlab曲线拟合色散方程 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  11. 初学CSS,美化一个属于你自己的网页
  12. 百练_3709:2进制转化为3进制
  13. 如何查看历史卫星影像图
  14. 小布机器人怎么断网_华硕“小布”智能机器人上手体验:造型呆萌可爱 全年龄段适用...
  15. 使用JavaScript使浏览器进入全屏或退出全屏
  16. 《深度学习之PyTorch物体检测实战》—读书笔记
  17. word 模板的位置
  18. 有关PHP文档生成工具---PHPDocumentor
  19. uiautomator2+python3,实现手机解锁,以及软件登录
  20. R语言 trim=0.1 tirm=0.2 什么意思呢?

热门文章

  1. Android 简易的自定义确认弹框AlertDialog
  2. CSI笔记【6】:Guaranteeing spoof-resilient multi-robot networks论文阅读
  3. PIC以太网开发板——基于微芯最新ENC28J60以太网控制器
  4. win10+ubuntu18.04lts:在已安装win10环境中利用EasyBCD引导安装Ubuntu
  5. 单片机编程软件很简单(22),keil单片机编程软件优化等级+概念解析
  6. H---RGB色彩图像分析
  7. iphone免越狱插件_如何保护iPhone免受盗贼的侵害
  8. drf 获取域名+端口_如何注册域名(+简单提示可免费获取)
  9. css_flex-grow增长系数/可用空间分配_实例
  10. python深度优先搜索传教士和野人_ai1 带回溯的深度优先策略:解决经典野人传教士过河问题的求解:三个修道士和三个野人过河 - 下载 - 搜珍网...