前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 如何优雅的在循环中删除元素

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

作者头像
鱼找水需要时间
发布2023-02-16 17:10:46
1.3K0
发布2023-02-16 17:10:46
举报
文章被收录于专栏:SpringBoot教程

正确示例

1. 迭代器(推荐使用)

代码语言:javascript
复制
	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循环倒排删除(推荐使用)

代码语言:javascript
复制
	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循环删除(不推荐使用,代码语义性不强)

代码语言:javascript
复制
	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);

错误用法

代码语言:javascript
复制
	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进行删除就会报错

代码语言:javascript
复制
	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);

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

代码语言:javascript
复制
	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 对象加锁。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正确示例
    • 1. 迭代器(推荐使用)
      • 2. for循环倒排删除(推荐使用)
        • 3. for循环删除(不推荐使用,代码语义性不强)
        • 错误用法
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档