gpt4 book ai didi

java - 为什么这段代码没有引起ConcurrentModificationException?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:56 31 4
gpt4 key购买 nike

这个问题已经有了答案:
Why is a ConcurrentModificationException thrown and how to debug it
6个答案
我读到了关于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/57168307/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com