Java 如何优雅的在循环中删除元素

简介: Java 如何优雅的在循环中删除元素

正确示例


1. 迭代器(推荐使用)


List<String> list = new ArrayList<>();
  list.add("1");
  list.add("1");
  list.add("2");
  Iterator<String> iterator = list.iterator();
  while (iterator.hasNext()){
    if("2".equals(iterator.next())){
        iterator.remove();;
    }
  }
  System.out.println("还剩余的元素:" + list);


2. for循环倒排删除(推荐使用)


List<String> list = new ArrayList<>();
  list.add("1");
  list.add("1");
  list.add("2");
  for (int i = list.size() - 1; i >= 0; i--) {
    if("1".equals(list.get(i))){
        list.remove(i);
    }
  }
  System.out.println("还剩余的元素:" + list);


3. for循环删除(不推荐使用,代码语义性不强)


List<String> list = new ArrayList<>();
  list.add("1");
  list.add("1");
  list.add("2");
  for (int i = 0; i < list.size(); i++) {
    if("1".equals(list.get(i))){
        list.remove(i);
        // 删除后重置下标,否则会漏删
        i--;
    }
  }
  System.out.println("还剩余的元素:" + list);


错误用法


List<String> list = new ArrayList<>();
  list.add("1");
  list.add("2");
  for (String item: list){
    if("1".equals(item)){
        list.remove(item);
    }
  }
  System.out.println("还剩余的元素:" + list);


上边执行没问题,把要删除的元素1改成2试试呢


或者用下边的list进行删除就会报错

List<String> list = new ArrayList<>();
  list.add("1");
  list.add("1");
  list.add("2");
  for (String item: list){
     if("1".equals(item)){
         list.remove(item);
     }
  }
  System.out.println("还剩余的元素:" + list);


如果集合中的元素唯一,也就是说只删除集合中符合条件的一个元素,以下用法也是没问题的

List<String> list = new ArrayList<>();
  list.add("1");
  list.add("2");
  list.add("3");
  for (String item: list){
     if("3".equals(item)){
         list.remove(item);
         // 只删除一个就跳出
         break;
     }
  }
  System.out.println("还剩余的元素:" + list);


总结:


【编码强制规约】在《阿里巴巴Java开发手册》中,针对集合操作,有一项规定:不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。

相关文章
|
14天前
|
Java 程序员 API
Java循环操作哪个快?
本文探讨了Java中Stream API与传统for循环的性能对比及适用场景。作者通过实际案例分析,指出在某些情况下,过度使用Stream API会导致代码可读性和维护性下降。测试结果显示,在数据量较小的情况下,普通for循环的性能优于Stream API,尤其是在涉及多次类似操作时。因此,建议在开发中根据具体需求选择合适的遍历方式,以提高代码的可读性和性能。
Java循环操作哪个快?
|
3月前
|
存储 Java
|
19天前
|
Java 开发者
|
30天前
|
算法 Java 测试技术
🧑‍💻Java零基础:Java 的循环退出语句 break
【10月更文挑战第16天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
47 6
|
30天前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
25 3
|
1月前
|
Java 测试技术 数据安全/隐私保护
📖Java零基础-while循环语句的深度解析
【10月更文挑战第6天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
31 1
|
1月前
|
传感器 Java 测试技术
📖Java零基础-do-while循环语句的深入剖析
【10月更文挑战第5天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
18 1
|
2月前
|
Java
java基础(2)循环语句for、while、do...while
本文介绍了Java中的基础循环语句,包括for循环、while循环和do...while循环。文章通过示例代码展示了for循环的基本结构和用法,while循环的先判断后执行逻辑,以及do...while循环的先执行后判断逻辑。这些循环语句在Java编程中非常常用,用于执行重复的任务。
51 4
java基础(2)循环语句for、while、do...while
|
6月前
|
Java
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
68 1
|
2月前
|
Java
Java循环
Java循环
43 6
下一篇
无影云桌面