java - 为什么此代码不会导致 ConcurrentModificationException?

标签 java iterator concurrentmodification

<分区>

我正在阅读有关 ConcurrentModificationException 以及如何避免它的信息。找到an article .该文章中的第一个列表具有类似于以下的代码,这显然会导致异常:

List<String> myList = new ArrayList<String>();
myList.add("January");
myList.add("February");
myList.add("March");

Iterator<String> it = myList.iterator();
while(it.hasNext())
{
    String item = it.next();
    if("February".equals(item))
    {
        myList.remove(item);
    }
}

for (String item : myList)
{
    System.out.println(item);
}

然后它继续解释如何用各种建议解决问题。

当我尝试重现它时,我没有得到异常! 为什么我没有得到异常?

最佳答案

根据 Java API 文档 Iterator.hasNext不会抛出 ConcurrentModificationException

选中“January”“February” 后,您从列表中删除了一个元素。调用 it.hasNext() 不会抛出 ConcurrentModificationException 但会返回 false。因此您的代码干净地退出。然而,最后一个字符串永远不会被检查。如果您将 "April" 添加到列表中,您会按预期获得异常。

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

public class Main {
        public static void main(String args[]) {

                List<String> myList = new ArrayList<String>();
                myList.add("January");
                myList.add("February");
                myList.add("March");
                myList.add("April");

                Iterator<String> it = myList.iterator();
                while(it.hasNext())
                {
                    String item = it.next();
                    System.out.println("Checking: " + item);
                    if("February".equals(item))
                    {
                        myList.remove(item);
                    }
                }

                for (String item : myList)
                {
                    System.out.println(item);
                }

        }
}

http://ideone.com/VKhHWN

关于java - 为什么此代码不会导致 ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14673653/

相关文章:

java - 如何动态调用基类中由字符串值指定的子类方法?

java - 通用整数类型到字符类型的转换

java - 日期和时间相减

c++ - C++ 迭代器是否可能有间隙而不是线性的?

css - 在 Sass 中动态生成类名和 CSS 属性

java - 为 Tomcat 添加 HSTS 特性

python - 有没有办法记住 python 迭代器中的位置?

java.util.ConcurrentModificationException -- 执行 IO 操作时的错误(不是列表)

java - 连续遍历 HashMap 需要什么代码?

java - 迭代时出现奇怪的 ConcurrentModificationException