【发布时间】:2019-02-21 02:29:04
【问题描述】:
如果我有一个 Map 或一个 List 并从中获取一个迭代器,例如:
var map = new HashMap();
var iterator = map.entrySet().iterator();
如果事后修改了该映射,它会影响迭代器还是迭代器一旦创建就基本上不可变?
如果不是不可变的,如何创建不可变的迭代器?
【问题讨论】:
-
相关,但我的问题可能措辞更好,更切中要害
-
为什么是-1?我认为这是一个有趣的问题?
-
请阅读文档,即
HashMap的javadoc:"这个类的所有“集合视图方法”返回的迭代器都是失败的-fast:如果在迭代器创建后的任何时候对映射进行结构修改,除了通过迭代器自己的remove方法之外的任何方式,迭代器都会抛出ConcurrentModificationException。” -
措辞上的问题并没有真正的意义,因为迭代器本质上必然是可变的;如果我理解正确,您想要一个迭代器,它是某个时刻底层集合的快照?