迭代期间java故障安全迭代器的删除
If fail safe iterator creates a clone of underlying data structure, why 'D' is never printed in program below?
Map<String, String> acMap = new ConcurrentHashMap<String, String>();
acMap.put("A", "Aye");
acMap.put("B", "Bee");
acMap.put("C", "See");
acMap.put("D", "Di");
Iterator<String> itr = acMap.keySet().iterator();
while(itr.hasNext())
{
acMap.remove("D");
System.out.println(itr.next());
}
# 1 楼答案
根据文档,地图上的任何操作都会反映在按键集上,反之亦然。而且
KeySet#iterator()
也不会克隆底层ds^{}
Read more documentation
See openjdk Implementation
# 2 楼答案
正如它在Javadoc for ^{} 中所说:
迭代器是,反映了构造之后的修改