Java中for循环遍历删除操作方法
在Java中,有些场景需要遍历集合中的元素,然后根据条件进行删除元素的操作。如果使用传统的for循环遍历方式来删除元素,很可能出错或发生意想不到的问题。推荐使用迭代器iterator完成
1. 推荐使用迭代器方式****删除
阿里规约:【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。
@Test void testList2(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if ("2".equals(item)) { iterator.remove(); } } System.out.println(list); }
2. 尽量不要使用for循环遍历删除,否则很可能出问题。
因为删除元素后,数组元素发生前移,后续遍历可能导致
数组访问越界错误:元素减少,但是size()没有变,(可改成for里使用list.size())
有元素没遍历到
@Test void testList(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); for (String item : list) { if ("2".equals(item)) { list.remove(item); } } System.out.println(list); } //或 @Test void testList2(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); int size = list.size(); for (int i=0; i<size; i++) { if ("2".equals(list.gei(i))) { list.remove(i); } } System.out.println(list); }
3. 如果非要使用这种的话,可以使用倒序遍历删除,这样即使发生元素移动,不影响前面的元素
@Test void testList3(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); for (int i=list.size()-1; i>=0; i--) { if ("2".equals(list.gei(i))) { list.remove(i); } } System.out.println(list); }
到此这篇关于Java中for循环遍历删除操作的文章就介绍到这了,更多相关java for循环删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Mybatis中resultMap的Colum和property属性详解
这篇文章主要介绍了Mybatis中resultMap的Colum和property属性,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。2022-01-01springboot编程式事务TransactionTemplate的使用说明
这篇文章主要介绍了springboot编程式事务TransactionTemplate的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06springboot+redis自定义注解实现发布订阅的实现代码
在Redis中客户端可以通过订阅特定的频道来接收发送至该频道的消息,本文主要介绍了springboot+redis自定义注解实现发布订阅,具有一定的参考价值,感兴趣的可以了解一下2023-08-08
最新评论