Java中for循环遍历删除操作方法
作者:小星星*
在Java中,有些场景需要遍历集合中的元素,然后根据条件进行删除元素的操作,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
在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循环删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!