gpt4 book ai didi

java - 迭代器 hasNext 返回 true 但 next 抛出异常

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:48 26 4
gpt4 key购买 nike

我只是好奇单个对象上的多个迭代器会如何表现并输入以下代码。

import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

class Test{
public static void main(String[] a) {
Map<Integer,String> map = new HashMap<>();
map.put(1,"One");

Iterator<Integer> it1 = map.keySet().iterator();
Iterator<Integer> it2 = map.keySet().iterator();

it1.next();
it1.remove();
System.out.println(it2.hasNext());
System.out.println(it2.next());

System.out.println(map.get(1));
}
}

map 如预期的那样是空的但是,我认为Iterator#hasNext会返回 false,但它会返回 trueIterator#next抛出一个 ConcurrentModificationException

当使用 Iterator#remove 方法从 Collection 中删除一个值时,另一个迭代器的 hasNext 方法不应该返回 false,因为不会有任何返回值吗?

最佳答案

hasNext方法只检查 next 属性:

public final boolean hasNext() {
return next != null;
}

唯一修改next属性的方法是:

也就是说,如果你有几个Iterator实例指向同一个集合实例,只有当你调用上面两种方法之一时,Iterator才会访问底层集合并检查它的状态是否发生了变化。

请注意,如果基础集合被修改,则迭代器的行为是未指定,这意味着它可能会发生变化,您不应依赖它。

关于java - 迭代器 hasNext 返回 true 但 next 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26379707/

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