for循环中使用remove方法。

List<String> list =new ArrayList<String>();
        list.add("boss");
        list.add("good");
        list.add("No");
        list.add("Fine");
        System.out.println(list);//[boss, good, No, Fine]
        Collections.sort(list);
        System.out.println(list);//[Fine, No, boss, good]
        list.add("我们");
        list.add("你就是");
        list.add("他很调");
        list.add("明天见");
        int i=0;
        while(true){

        for (String dwonCountCmd : list) {

                if (i<30) {
                    System.out.println(dwonCountCmd+i);
                    i++;
                } else{
//在循环中把集合的一个元素移除了,如果此时不break的话,就会报错
                    list.remove(dwonCountCmd);
                    System.out.println(list.toString());
                    break;
                }
            }
        }
        

会报这种错

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
    at java.util.AbstractList$Itr.next(Unknown Source)
    at Test2.main(Test2.java:47)
时间: 2024-10-19 12:15:44

for循环中使用remove方法。的相关文章

在foreach循环中使用remove报ConcurrentModificationException异常原因

在foreach循环中使用remove报ConcurrentModificationException异常原因 我的代码具体是这样的 int dindex=0; int did=getInt("请输入需要删除的学生学号:"); for (Student student:list) { if(student.id==did){ list.remove(student); } } 这样会导致remove后,导致list在循环中下标和实际已经被修改后的下标不一致 我自己的解决方案是: int

探讨迭代器中为什么不能通过集合的方式删元素而是使用迭代器中的remove()方法经行删除

由该链接引发的思考:http://bbs.itheima.com/forum.php?mod=viewthread&tid=26270&mobile=1 看到这篇文章后,一副似懂非懂的样子,果断将楼主的代码拷贝到eclipse中运行了下,果断发现了些问题. 经过测试,发现总是在当集合中倒数第二个满足条件时程序才可以正常运行,否则,就会抛出ConcurrentModificationException异常 然后,我在while{it.hasNext()){和String str = (Str

collection中的remove方法

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionTest03 { /** boolean remove(Object o); remove和contains方法都需要集合中的元素重写equals方法. 因为Object中的equals方法比较内存地址,在现实的业务逻辑当中 不能比较内存地址,该比较内容. */ public stat

Java中LinkedList的remove方法真的耗时O(1)吗?

这个问题其实来源于Leetcode的一道题目,也就是上一篇日志 LRU Cache.在使用LinkedList超时后,换成ArrayList居然AC了,而问题居然是在于List.remove(Object o)这个方法. 我们知道,链表和数组相比,最主要的特点就是add和remove的操作是O(1)的.Java中的链表一般使用LinkedList这个类型,数组一般使用ArrayList.它们同时implements了List这个interface,所以都有remove(int index)和re

Iterator的remove方法可保证从源集合中安全地删除对象(转)

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorTest{ public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("Test1"); list.add("Test2&qu

ArrayList调用remove方法需要注意的地方

ArrayList中有remove 方法和 removeAll方法, ArrayList中不仅继承了接口Collection中的remove方法,而且还扩展了remove方法. Collection中声明的接口为 public boolean remove(Object o) public boolean removeAll(Collection<?> c) ArrayList中含有的方法为public E remove(int index) 实际编程中可能会通过一个Collection来调用

JAVA中循环删除list中元素的方法总结

印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末.看总结.. JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环).iterator遍历. 1.for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")

JAVA中循环删除list中元素的方法总结(跳格删除问题解决)(转)

印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末.看总结.. JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环).iterator遍历. 1.for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")

为什么在foreach循环中不要对元素进行remove/add操作?

目录 前言 正文 为什么结果如此不同? remove/add方法? 如何解决? 前言 在阿里巴巴Java开发手册中,有下面这样的规定: 这篇文章我们就来深入探讨其中的原因. 正文 为什么结果如此不同? 我们先来看看前言中的反例会出现什么意料之外的结果: ---------------------------------------------------------------------------------------------------------------------------