遍历集合,判断并添加元素的集中方法
2016-03-01 07:53
435 查看
/* * 需求:遍历集合,如果集合中有world这个元素,我就在添加一个元素:android * * java.util.ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 并发修改异常。 * * 这个时候,为什么会报错呢? * 回想一下,迭代器是怎么存在的。 * 先有集合,才有迭代器,迭代器是依赖于集合而存在。 * 而我们现在,是在使用迭代器的同时,通过集合去修改了集合元素。这个时候,集合的内部就发生了改变, * 而迭代器并不知道这些,所以,再次迭代的时候就报错了,错误的原因:你在用迭代器迭代的时候,用集合修改了集合中的元素。 * * 解决问题方案: * A:用迭代器迭代,用迭代器修改集合元素 * <span style="white-space:pre"> </span>这个时候,元素是直接添加到查找的元素后面,不是在末尾处添加。 * B:用集合遍历,用集合修改集合元素 * <span style="white-space:pre"> </span>这个时候,元素是在集合的末尾添加。 * <span style="white-space:pre"> </span>你有没有听说过并发修改异常?如果有,请问在哪里见过?怎么产生的?怎么解决的? */
List<String> list2 = new ArrayList<>(); list2.add("hello"); list2.add("world"); list2.add("Java"); // 方式1 不可用 // Iterator<String> iterator2 = list2.iterator(); // // java.util.ConcurrentModificationException 并发修改异常 // while (iterator2.hasNext()) { // String string = iterator2.next(); // if ("world".equals(string)) { // list2.add("we"); // } // } // 方式2 不可用 // // java.util.ConcurrentModificationException // for (String string : list2) { // if ("Objective-c".equals(string)) { // list2.add("swift"); // } // } // 方式3 可用 ListIterator<String> lIterator = list2.listIterator(); while (lIterator.hasNext()) { String string = lIterator.next(); if ("world".equals(string)) { System.out.println("----------------------"); lIterator.add("Objective-c"); // [hello, world, Objective-c, Java] } } System.out.println(list2); // 方式4 可用的 for (int i = 0; i < list2.size(); i++) { String string = list2.get(i); if ("Objective-c".equals(string)) { list2.add("swift"); // [hello, world, Objective-c, Java, swift] } } System.out.println(list2);
相关文章推荐
- Grab Cut
- 【BZOJ 2809】 [Apio2012]dispatching
- 16位,32位,64位操作系统下,各类型的长度整理
- day24:park Hash Shuffle内幕彻底解密
- spark源码学习(十):map端计算结果缓存处理(二)
- OSChina 周二乱弹 ——开启花样告白模式吧
- UVA 11149 Power of Matrix
- 2016年3月1日--3月25日(0小时,剩3152小时)
- 2016年2月22日--2月29日(18小时,剩3152小时)
- 【源码】谷歌代理~WPF简单小软件-2015-10-15首发 (2016-03-01已更新源)
- 计算机视觉,机器学习方面的论文和算法代码
- 3262: 陌上花开 树状数组套平衡树/CDQ分治
- 个人介绍及计划
- unix_8_进程控制(一)
- 【java web笔记】Tomcat设置虚拟目录和支持中文路径
- safari穿越到chrome
- TRIZ的成功案例
- 单点登录cas常见问题(十三) - 几个重要概念怎么理解?
- 【Android】16.5 Android内置的系统服务
- 【Android】16.4 IntentService类