`

java在一个循环中删除列表中元素的问题

 
阅读更多
思考下面这段代码的结果:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size();i++){
    list.remove(i);
}
System.out.println(list);


想必大家都知道结果是[b,d]
因为当一个元素被删除时,列表的大小缩小并且下标变化,当删除了元素a之后,列表的长度变为3,列表变为[b,c,d],所以当i=1的时候,其实删除的是元素c,列表变为[b,d],循环结束。

如下代码是有名的ConcurrentModificationException异常
      ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
      for(String s:list){
            if(s.equals("a")){
                list.remove(s);
            }
      }

这个问题是说,你不能在对一个List进行遍历的时候将其中的元素删除掉。

解决方法如下:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
        String s = iter.next();
        if(s.equals("a")){
            iter.remove();
    }
}

分享到:
评论

相关推荐

    java集合类arraylist循环中删除特定元素的方法.docx

    为了解决上述问题,可以在每次删除元素后调整循环控制变量或列表大小,以确保遍历过程的正确性: ```java for (int i = 0; i (); ) { if (list.get(i).equals(XXX)) { list.remove(i); } else { i++; } } ``` ...

    Java中增强for循环的实现原理和坑详解

    在增强for循环中,Java编译器会将其转换为一个普通的for循环,使用迭代器来遍历集合或数组。迭代器会在遍历过程中维护一个索引,指向当前要遍历的元素。这样,增强for循环可以简洁地遍历集合或数组,提高编程效率。 ...

    java基础for循环练习题

    在"java基础for循环练习题"中,我们通常会遇到几种类型的`for`循环,包括基本的`for`循环、增强型`for`循环(也称为foreach循环),以及在数组和集合中的应用。下面我们将深入探讨这些知识点。 1. **基本的for循环*...

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

    在Java编程中,当需要在循环中删除列表(List)中的元素时,需要注意一些关键点以避免潜在的问题。这里我们将详细讨论几种不同的循环遍历和删除元素的方法,以及它们的适用场景。 1. **常规for循环**: ```java for...

    java批量删除列表内容

    在Java编程中,批量删除列表内容是一个常见的需求,特别是在处理大量数据或进行数据清理时。本文将深入探讨如何实现这个功能,以及相关的Java批量处理技术。 首先,让我们了解Java中最常用的列表接口`List`,它提供...

    Java 中删除线性表(如数组或列表)中指定区间的元素

    在数组中删除元素通常涉及移动元素来填补被删除元素留下的空位。如果要删除一个区间,例如从下标i到j的所有元素,你需要遍历数组,从j+1开始将每个元素前移一位,直到达到i。但请注意,这种方法效率较低,因为数组...

    Java实现循环链表

    用Java定义一个循环链表,实现链表的基本操作: 初始化*、获取头结点、添加新元素*、删除链表元素 、获取链表元素*、查找链表元素*、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空...

    基于java的循环单链表

    与普通单链表不同,循环单链表的最后一个元素不是指向null,而是指向前一个元素,形成一个无限循环。这种数据结构允许我们高效地进行线性遍历和定位。 在Java中实现循环单链表,通常会涉及以下三个主要类: 1. ...

    java集合类arraylist循环中删除特定元素的方法

    为了解决这个问题,我们在删除元素后减小`len`,确保循环不会超出范围。尽管这种方法可以工作,但它并不推荐,因为它涉及到对循环变量的修改,这在多线程环境中可能导致问题。 ### 方案二:基于迭代器的删除 第二...

    java二维数组删除特定行代码

    在`delete`方法中,首先通过一个外层循环遍历`tongjidata`数组,检查每个元素是否满足删除条件。如果满足条件,则进入内层循环,再次遍历`data`数组,查找与当前`tongjidata`元素匹配的行。一旦找到,便执行删除操作...

    java 版本循环链表

    循环链表是一种常见的数据结构,在计算机科学中广泛使用,它允许在链表的末端继续添加新的元素,从而形成一个环状结构。在这种数据结构中,最后一个节点的下一个节点不是空,而是指向第一个节点。 从提供的部分描述...

    基于java的循环双链表

    在这个测试类中,我们可以创建一个`CircularDoublyLinkedList`实例,然后调用接口方法插入、删除元素,同时检查结果是否符合预期。这通常会包括一些基本的单元测试,例如空链表操作、添加元素后的遍历、以及在不同...

    java中循环遍历删除List和Set集合中元素的方法(推荐)

    这种方法通过获取集合的Iterator,并在循环中使用`iterator.remove()`方法删除元素,避免了并发修改的问题。 ```java List&lt;CheckWork&gt; list = this.getUserDao().getAll(); Iterator&lt;CheckWork&gt; chk_it = list....

    java中for循环删除集合陷阱

    在Java编程语言中,使用for循环来遍历并删除集合元素时,需要注意一个常见的陷阱,即在循环过程中直接修改集合的结构可能导致意外的结果。这个问题主要出现在增强for循环(也称为foreach循环)和常规for循环中,但...

    顺序表删除重复元素java.docx

    ArrayList是Java集合框架中的一种动态数组,允许在任何位置插入和删除元素,具有较高的灵活性。 以下是对给定代码的详细解释: 1. **ArrayList类**:ArrayList继承自AbstractList并实现了List接口,它使用可变大小...

    循环链表的经典实现(JAVA)

    循环链表是一种特殊的链式数据结构,它与普通链表的区别在于最后一个节点的指针不是指向NULL,而是指向链表的第一个节点,形成一个闭合的循环。这种数据结构在处理环形逻辑问题时非常有用,比如在算法中的Floyd判...

    Java 实例 - List 循环移动元素源代码+详细指导教程.zip

    本教程将深入讲解如何在Java中对List进行循环移动元素的操作,通过源代码实例和详细指导来帮助你掌握这一技能。 首先,我们需要理解Java中的List接口,它继承自Collection接口,常见的实现类有ArrayList和...

    java for循环与增强for循环

    例如,在遍历一个包含Object类型的Set集合时,使用增强for循环可以简化代码: ```java Set&lt;Object&gt; set = new HashSet(); for (Object obj : set) { if (obj instanceof Integer) { int aa = (Integer) obj; // ....

    遍历并批量删除容器中元素出现ConcurrentModificationException原因及处置

    当你在一个迭代器正在遍历集合的过程中添加或删除元素时,就会抛出这个异常。这个问题在单线程环境下不会出现,但在多线程并发场景下,如果多个线程同时修改一个集合,就可能导致`ConcurrentModificationException`...

    Java的循环单链表及其测试程序

    在Java编程中,循环单链表是一种特殊的数据结构,它扩展了传统的单链表概念,使得链表的最后一个元素指向第一个元素,形成了一个无尽的循环。这种数据结构在处理循环逻辑或者需要快速访问链表头尾的情况时非常有用。...

Global site tag (gtag.js) - Google Analytics