遍历ArrayList的过程中移除元素的方式

遍历ArrayList的过程中移除元素的方式错误方法一使用for循环正序遍历ArrayList,使用remove移除元素结果如下,只删除了一个“3”原因:在匹配到第一个要删除的元素并移除时,后面元素会往前移位,导致索引位置改变,从而漏掉后面一个元素。publicstaticvoidmain(String[]args){ ArrayList<String>list=newArrayList<>(); list.add(“1”); list.add(“2”); list.add(“3”

大家好,又见面了,我是你们的朋友全栈君。

错误方法一

使用for循环正序遍历ArrayList,使用remove移除元素
结果如下,只删除了一个“3”

原因:在匹配到第一个要删除的元素并移除时,后面元素会往前移位,导致索引位置改变,从而漏掉后面一个元素。

public static void main(String[] args) { 
   
	 ArrayList<String> list = new ArrayList<>();
	 list.add("1");
	 list.add("2");
	 list.add("3");
	 list.add("3");
	 list.add("5");
	 list.add("6");
	 list.add("7");
	
	 for (int i = 0; i < list.size(); i++){ 
   
	     if (list.get(i).equals("3"))
	         list.remove(i);
	 }
	 
	 System.out.println(list);
}
原list:[1, 2, 3, 3, 5, 6, 7]
移除后: [1, 2, 3, 5, 6, 7]

错误方法二

使用增强for循环遍历ArrayList移除元素,
会产生java.util.ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出

for (String s : list) { 
   
    if (s.equals("3"))
        list.remove(s);
}

结果:

Exception in thread "main" java.util.ConcurrentModificationException

正确方法一

使用for循环倒序遍历ArrayList,使用remove移除元素
数组倒序遍历时即使发生元素删除也不影响后序元素遍历,因为前面的元素位置不会改变。

for (int i = list.size() - 1; i >= 0; i--){ 
   
    if (list.get(i).equals("3"))
        list.remove(i);
}

正确方法二

使用迭代器remove方法删除(推荐)

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){ 
   
    String s = iterator.next();
    if (s.equals("3"))
        iterator.remove();
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163103.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • struts2 一个简洁的struts.xml

    struts2 一个简洁的struts.xml

    2021年12月8日
    41
  • vim鼠标模式打开与关闭

    vim鼠标模式打开与关闭

    2021年11月7日
    44
  • 分享一个免费的图片去水印网站[通俗易懂]

    分享一个免费的图片去水印网站[通俗易懂]一、软件截图二、操作说明1、先上传图片2、点击选择区域,在图片上选择要去水印的区域,可支持同时选择多个区域。3、点击开始去水印4、保存去水印的图片到本地。5、如果不满意可再次选择。三、免费体验地址http://121.196.27.184:8080/…

    2025年7月14日
    4
  • Kong网关插件使用「建议收藏」

    Kong网关插件使用「建议收藏」转载李亚飞大佬的文章:https://www.lyafei.com/授权验证在接口请求中权限验证是一个恒久不变的话题,Kong自带了6种加密方式先创建一个BasicAuth,直接确认即可此时页面访问http://dev.lyafei.com:8000/dev会弹出登录框,让你输入用户名密码,若取消则会返回{“message”:“Unauthorized”},若输入用户名和密码后确认会返回{“message”:“Invalidauthenticationcredential.

    2025年10月23日
    6
  • android系统webview最新版本_webview加载h5页面空白

    android系统webview最新版本_webview加载h5页面空白做android聊天时,遇到过一个问题,h5的页面发送的图片在android端不能响应,ios那边一路畅通。也是相当无奈,目前发现了好多android端与ios端webView的异同。android端与ios确的不同大致包括:1:android不能直接打开html的下载文件,需要先下载保存本地在打开本地文件2:android不能直接打开pdf文件,同样要下载再打开3:如题,h5页面的发送图片按钮点…

    2022年9月22日
    3
  • springboot项目导入idea中如何部署启动_idea怎么导入javaweb项目

    springboot项目导入idea中如何部署启动_idea怎么导入javaweb项目最近公司要求开发工具要用Idea,作为一个eclipse的老员工,记录一下Idea中遇到的坑刚开始用Idea从Git上导入一个项目时,遇到了很多坑,网上有很多方法,我不多做介绍。只说明一下我使用的方法。1.本地新建一个文件夹,从git上导入项目到本地文件夹。(git的相关使用请自行百度,这里只讲Idea的使用方法)2.将这个文件夹直接拖到Idea的启动图标上。或者,从Ide…

    2022年10月10日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号