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 对象加锁。

相关文章
|
2月前
|
存储 Java
|
6天前
|
Java 测试技术 数据安全/隐私保护
📖Java零基础-while循环语句的深度解析
【10月更文挑战第6天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
11 1
|
7天前
|
传感器 Java 测试技术
📖Java零基础-do-while循环语句的深入剖析
【10月更文挑战第5天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
9 1
|
1月前
|
Java
java基础(2)循环语句for、while、do...while
本文介绍了Java中的基础循环语句,包括for循环、while循环和do...while循环。文章通过示例代码展示了for循环的基本结构和用法,while循环的先判断后执行逻辑,以及do...while循环的先执行后判断逻辑。这些循环语句在Java编程中非常常用,用于执行重复的任务。
38 4
java基础(2)循环语句for、while、do...while
|
5月前
|
Java
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
60 1
|
1月前
|
Java
Java循环
Java循环
40 6
|
1月前
|
编译器
Java--for循环语句
Java--for循环语句
|
2月前
|
存储 Java
如何在 Java 中循环 ArrayList
【8月更文挑战第23天】
30 2
|
2月前
|
Java
Java 流程控制15道练习题(选择&循环)
Java 流程控制15道练习题(选择&循环)
45 10
|
2月前
|
Java 机器人 开发者
04 Java流程控制-循环(while+for+关键字+嵌套)
04 Java流程控制-循环(while+for+关键字+嵌套)
55 4