gpt4 book ai didi

java - 为什么 Iterator 或 listIterator 的 hasnext、hasprevious 等方法不检查 ConcurrentModificationException

转载 作者:行者123 更新时间:2023-11-30 09:12:40 24 4
gpt4 key购买 nike

我知道 failfast 迭代器会尽最大努力检查 ConcurrentModificationException。为什么 hasnext 或 hasPrevious 等方法不检查 ConcurrentModificationException 并抛出它???

以下代码运行良好的确切原因是这些方法虽然在结构上进行了修改,但未针对 CME 检查

public static void main(String[] args) {
// TODO Auto-generated method stub


List<String> lilong = new ArrayList<String>();
lilong.add("Queen");
for(Iterator<String> iter =lilong.iterator();iter.hasNext();)
{
System.out.println(iter.next());
lilong.add("King");
lilong.remove(0);
lilong.add("Star");
lilong.remove(0);
lilong.add("Sun");
lilong.remove(0);
lilong.add("Polar Bear");
lilong.clear();

lilong.add("There you go");

}
System.out.println("size="+ lilong.size()+"##element##"+lilong.iterator().next());
}

最佳答案

hasNext 用于 ArrayList 的迭代器检查修改,它只查看大小。

如果您在列表中再添加一个元素,您将进入第二次迭代,然后 next 将按预期失败。

至于为什么要这样实现...+1 给你的问题。

关于java - 为什么 Iterator 或 listIterator 的 hasnext、hasprevious 等方法不检查 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21450191/

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