遍历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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 鸿蒙系统下的搜狗输入法,搜狗输入法鸿蒙版app下载-搜狗输入法 鸿蒙版v10.28-PC6鸿蒙网…

    鸿蒙系统下的搜狗输入法,搜狗输入法鸿蒙版app下载-搜狗输入法 鸿蒙版v10.28-PC6鸿蒙网…搜狗输入法鸿蒙版app是一款高效手机输入法应用。搜狗输入法鸿蒙版app词库强大、流畅高效,还有表情包、语音变声、花样字等趣味功能。软件介绍搜狗输入法鸿蒙版app是一款打字超準、词库强大、主题美观、表情丰富,用了让您爱不释手的输入法应用。搜狗输入法鸿蒙版app拥有超大中文词库,输入更加精准,智能。搜狗智能旺仔带你用AI表达,斗图,妙语,输入更加有趣。功能介绍【搜狗专属超大词库】搜狗多年积累,超大中文…

    2022年7月13日
    48
  • 怎么从安卓设备转移数据到苹果_如何从安卓设备将数据转移到 iPhone 12?「建议收藏」

    怎么从安卓设备转移数据到苹果_如何从安卓设备将数据转移到 iPhone 12?「建议收藏」如果之前是安卓用户,在购买iPhone12新款手机之后,如何从安卓转移数据到iOS?可以通过苹果官方提供的“转移到iOS”应用,将安卓手机中的内容进行转移。可转移的内容包括:通讯录、信息历史记录、相机照片和视频、Web书签、邮件帐户和日历。转移完成之后,您可以从AppStore下载任何匹配的免费App。使用前准备事项:1.通过苹果官网下载“转移到iOS”应用,并在安卓手机中进…

    2022年9月18日
    3
  • 调整Android Studio分配内存大小

    调整Android Studio分配内存大小

    2021年9月30日
    1.3K
  • 使用多重循环打印平行四边形「建议收藏」

    packagecom.qfedu.test1;/*** 使用多重循环打印平行四边形* 当我们打印三角形的时候:* 1.观察第一行符号的个数,第一行符号的个数决定了循环计数器的初始值* 2.观察形状符号的个数是越来越多的话就++越来越少就–* 3.当计数器变化为++的时候判断条件一定要小于或者小于等于某个值相当于设定一个上限* 4.当计数器变化为–的时候判断条件一定要大于或者大于等于某个值相当于设定一个下限*/publicclassT

    2022年4月7日
    75
  • java连接MySQL数据库的驱动jar包

    java连接MySQL数据库的驱动jar包mysql官网:https://dev.mysql.com/步骤1步骤2步骤3步骤4或者直接点击这个链接直接到这个页面https://dev.mysql.com/downloads/connector/j/在这个页面再点击弹出的下拉列表这个点击PlatformIndependent然后点击第二个下载在出现的页面点击Nothanks,juststartmydownload即可下载不用登陆我们只下载就行然后将下载的压缩文件导入idea中即可了!手动截图不易点

    2022年5月21日
    36
  • TD—SCDMA的系统帧结构_sdh帧结构

    TD—SCDMA的系统帧结构_sdh帧结构TD-SCDMA物理信道用4层结构:超帧、无线帧、子帧和时隙/码。一个超帧长720ms,由72个无线帧组成,每个无线帧长10ms。TD-SCDMA将每个无线帧分为两个5ms的子帧,每个子帧由长度675us的7个主时隙和3个特殊时隙组成。3个特殊时隙分别是下行导频时隙(DwPTS,75us)、上行导频时隙(UpPTS,125us)和保护时隙(G,75us)构成。在这7个主时…

    2022年10月3日
    2

发表回复

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

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