ArrayList_HashMap集合中的元素删除

1.如题

根据别人的博客整理记录的,只是希望自己能够随时翻阅!
别人的博客

2.ArrayList遍历时删除元素的几种姿势

首先结论如下:
第1种方法 - 普通for循环正序删除(结果:会漏掉元素判断)
第2种方法 - 普通for循环倒序删除(结果:正确删除)
第3种方法 - for-each循环删除(结果:抛出异常)
第4种方法 - Iterator遍历,使用ArrayList.remove()删除元素(结果:抛出异常)
第5种方法 - Iterator遍历,使用Iterator的remove删除元素(结果:正确删除)

其中的正确方式

	ArrayList<Integer> arrayList = new ArrayList();
	        arrayList.add(1);
	        arrayList.add(2);
	        arrayList.add(3);
	        arrayList.add(3);
	        arrayList.add(4);
	        arrayList.add(5);

	Iterator<Integer> iterator = arrayList.iterator();
	while (iterator.hasNext()) {
	    Integer value = iterator.next();
	    if (value.equals(3)) {//3是需要删除的元素
	        iterator.remove();
	    }
	}
	-----------------------------------------------------------
	输出结果:
	当前arrayList是[1, 2, 3, 3, 4, 5]
	当前arrayList是[1, 2, 3, 3, 4, 5]
	当前arrayList是[1, 2, 3, 4, 5]
	当前arrayList是[1, 2, 4, 5]
	当前arrayList是[1, 2, 4, 5]
	当前arrayList是[1, 2, 4, 5]

可以正确删除元素。
跟第3种和第4种方法的区别在于是使用iterator.remove();来移除元素,而在remove()方法中会对iterator的expectedModCount变量进行更新,所以在下次循环调用iterator.next()方法时,expectedModCount与modCount相等,不会抛出异常。

3.HashMap遍历时删除元素的几种姿势

首先结论如下:
第1种方法 - for-each遍历HashMap.entrySet,使用HashMap.remove()删除(结果:抛出异常)。
第2种方法-for-each遍历HashMap.keySet,使用HashMap.remove()删除(结果:抛出异常)。
第3种方法-使用HashMap.entrySet().iterator()遍历删除(结果:正确删除)。

其中的正确方式

	HashMap<String,Integer> hashMap = new HashMap<String,Integer>();
	hashMap.put("key1",1);
	hashMap.put("key2",2);
	hashMap.put("key3",3);
	hashMap.put("key4",4);
	hashMap.put("key5",5);
	hashMap.put("key6",6);

	Iterator<Map.Entry<String, Integer>> iterator  = hashMap.entrySet().iterator();
	while (iterator.hasNext()) {
	    Map.Entry<String, Integer> entry = iterator.next();
	    if(entry.getKey().contains("3")){
	        iterator.remove();
	    }
	    System.out.println("当前HashMap是"+hashMap+" 当前entry是"+entry);
	}
	------------------------------------------------------------------------------------
	输出结果:
	当前HashMap是{key1=1, key2=2, key5=5, key6=6, key4=4, deletekey=3} 当前entry是key1=1
	当前HashMap是{key1=1, key2=2, key5=5, key6=6, key4=4, deletekey=3} 当前entry是key2=2
	当前HashMap是{key1=1, key2=2, key5=5, key6=6, key4=4, deletekey=3} 当前entry是key5=5
	当前HashMap是{key1=1, key2=2, key5=5, key6=6, key4=4, deletekey=3} 当前entry是key6=6
	当前HashMap是{key1=1, key2=2, key5=5, key6=6, key4=4, deletekey=3} 当前entry是key4=4
	当前HashMap是{key1=1, key2=2, key5=5, key6=6, key4=4} 当前entry是deletekey=3

4.结论

ArrayList与HashMap遍历删除元素的时候,你会发现,通过Iterator迭代的方式都能够正确的删除,因此建议在对这两个集合中的元素做删除操作的时候,尽量选择通过iterator迭代器的方式移除集合中元素!

原作者:NotFound9
原博客连接
链接:https://juejin.im/post/5e0c3c38f265da5d1a446a8c
来源:掘金

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值