• 怎么在循环List的时候删除List的元素


    怎么在循环List的时候删除List的元素

    1. 先给出结论

    任何时候都不要在 for 循环中删除 List 集合元素

    2. 为什么在 for 循环中删除 List 集合元素是错误的

    在 for 循环中删除 List 集合元素的问题主要是因为循环的迭代器和 List 集合的元素索引之间的冲突。在使用 for 循环遍历 List 集合时,循环迭代器会维护一个指向当前元素的索引,而当删除 List 集合中的元素时,该索引会被更新。这将导致迭代器和 List集合中元素索引之间的不一致性,从而可能导致意想不到的行为和错误。

    3. 如何避免在 for 循环中删除 List 集合元素

    法一:使用迭代器来遍历 List 集合

    List<String> list = new ArrayList<();
    list.add("a");
    list.add("b");
    list.add("c");
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {    
    	String s = iterator.next();    
    	if (s.equals("b")) {        
    		iterator.remove();    
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这个代码片段中,我们使用迭代器来遍历 List 集合,而不是使用 for-each 循环。在迭代器的 while循环内部,我们首先使用迭代器的 next() 方法来获取 List 集合中的下一个元素,并且在遍历过程中可以使用迭代器的 remove()方法来删除元素,而不会导致任何错误。

    法二:使用另一个 List 集合来存储需要删除的元素

    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    List<String> toRemove = new ArrayList<>();
    for (String s : list) {    
    	if (s.equals("b")) {        
    		toRemove.add(s);    
    	}
    }
    list.removeAll(toRemove);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这个代码片段中,我们首先创建了一个空的 List 集合 toRemove,然后在 for-each 循环中遍历 List集合。当我们找到需要删除的元素时,我们将其添加到 toRemove 集合中。最后,在循环之外,我们可以使用 List 集合的removeAll() 方法来删除 toRemove 集合中的元素,从而避免在循环中删除 List 集合元素时出现的错误。

    4. 总结

    在 for 循环中删除 List 集合元素是一个常见的错误,可能会导致程序出现意想不到的问题和错误。这个问题的根本原因是循环迭代器和List 集合元素索引之间的冲突。为了避免这个问题,我们可以使用迭代器来遍历 List 集合并删除元素,或者使用另一个 List集合来存储需要删除的元素,并在循环之外删除这些元素。通过遵循这些最佳实践,我们可以确保我们的程序能够正确地处理 List集合中的元素,避免出现意想不到的错误。

  • 相关阅读:
    Unity随笔:当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?
    Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice
    抖音seo优化排名源码搭建
    dmfldr指定某列为缺省值进行导入
    Nature Medicine:肠道菌群代谢组学-苯乙酸PAA能够诱发脂肪性肝病
    java每一练(3)
    Python网页应用开发神器fac 0.2.10版本新功能介绍
    有关架构设计的个人思考(本文后续不断修改更新)
    【AVL树】
    blender UV展开
  • 原文地址:https://blog.csdn.net/weixin_45714641/article/details/137142577