gpt4 book ai didi

java - List 抛出 ConcurrentModificationException 但 set 不抛出 ConcurrentModificationException?

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:54 30 4
gpt4 key购买 nike

<分区>

我有下面两个java类

import java.util.*;

public class ArrayListTest032 {
public static void main(String[] ar) {
List<String> list = new ArrayList<String>();
list.add("core java");
list.add("php");
list.add("j2ee");
list.add("struts");
list.add("hibernate");

Iterator<String> itr = list.iterator();

while (itr.hasNext()) {
System.out.println(itr.next());
}
list.remove("php");

while (itr.hasNext()) {
System.out.println(itr.next());
}

}
}

当我运行上面的代码时,我得到下面的输出。

core java
php
j2ee
struts
hibernate

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at ArrayListTest032.main(ArrayListTest032.java:20)

这是预期的,因为我在迭代时修改列表。但在下面的 java 类中,相同的逻辑由集合系列执行。

import java.util.*;

public class HashSetTest021 {
public static void main(String[] ar) {
Set<String> set = new HashSet<String>();
set.add("core java");
set.add("php");
set.add("j2ee");
set.add("struts");
set.add("hibernate");

Iterator<String> itr = set.iterator();

while (itr.hasNext()) {
System.out.println(itr.next());
}
set.remove("php");

while (itr.hasNext()) {
System.out.println(itr.next());
}

}
}

输出是。

hibernate
core java
j2ee
php
struts

没有任何ConcurrentModificationException

我只是想知道为什么在 list 系列的情况下,同一段代码会抛出 ConcurrentModificationException,但没有任何 ConcurrentModificationException 以防万一集合

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