gpt4 book ai didi

java - 为什么在 ArrayList 上使用 for-each 循环不起作用?

转载 作者:行者123 更新时间:2023-12-02 09:19:41 25 4
gpt4 key购买 nike

我已经stumbled upon this code ,这会抛出 ConcurrentModificationException

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));

for (String s : list) {
if (s.equals("a"))
list.remove(s);
}

如果添加迭代器并使用 while 循环,代码可以正常工作:

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();
}
}

我不明白,为什么有必要使用Iterator<String>在这种情况下。是否因为 ArrayList 没有某种迭代能力,尽管它是 subclass of Collection

是否有必要使用 while 循环,或者您可以生成带有 for 循环的版本吗?

最佳答案

如果 Collection在迭代它时被修改,在大多数实现中, ConcurrentModificationException被抛出。

“foreach”版本:

for (String s : list) {
if (s.equals("a"))
list.remove(s);
}

内部相当于

for(Iterator<String> i = list.iterator(); i.hasNext(); ) {
String s = i.next();
if (s.equals("a"))
list.remove(s);
}

如您所见,创建了一个迭代器,但直接修改了列表。 list 只能由用于迭代它的迭代器 i 进行修改。

关于java - 为什么在 ArrayList 上使用 for-each 循环不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34810407/

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