gpt4 book ai didi

java - 基于其中元素数量的 java.util.List 的异常行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:12 24 4
gpt4 key购买 nike

<分区>

我知道如果在某些线程使用迭代器遍历集合时更改集合,iterator.next() 将抛出 ConcurrentModificationException。 .

但它会根据列表中元素的数量显示不同的行为。

我尝试了一个代码片段,其中我在 for-each 循环中遍历了一个列表,并在遍历之间使用列表的 remove() 方法从列表中删除了一个元素。

理想情况下,它应该在这种情况下抛出 ConcurrentModificationException,而不依赖于列表中的元素数量,但当列表中的元素数量为两个时,情况并非如此。

案例 1:列表中的元素数量 - 1

 public static void main(String[] args) 
{
List<String> list=new ArrayList<String>();
list.add("One");

for (String string : list)
{
System.out.println(string);
list.remove(string);
}
}

Output: One

Exception in thread "main" java.util.ConcurrentModificationException

这是预期的。

情况 2:列表中的元素数量 - 2

 public static void main(String[] args) 
{
List<String> list=new ArrayList<String>();
list.add("One");
list.add("two");

for (String string : list)
{
System.out.println(string);
list.remove(string);
}
}

Output: One

没有抛出异常????????

情况 3:列表中的元素数量 - 3

 public static void main(String[] args) 
{
List<String> list=new ArrayList<String>();
list.add("One");
list.add("Two");
list.add("Three");

for (String string : list)
{
System.out.println(string);
list.remove(string);
}
}

Output: One

Exception in thread "main" java.util.ConcurrentModificationException

再次抛出异常,这是理想的行为。

但为什么它在 case-2 中正常运行而没有抛出任何 ConcurrentModificationException。

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