遍历集合,判断并添加元素的集中方法

/*
 * 需求:遍历集合,如果集合中有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);


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值