如果失败安全迭代器创建了底层数据结构的克隆,为什么' D'永远不会在下面的程序中打印出来?
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());
}
答案 0 :(得分:1)
根据文档,地图上的任何操作都将反映在键集上,反之亦然。并且KeySet#iterator()
也不会克隆底层的ds。
返回此地图中包含的键的Set视图。这套是 由地图支持,因此对地图的更改将反映在集合中,并且 反之亦然。该集支持元素删除,删除 来自此地图的相应映射,通过Iterator.remove, Set.remove,removeAll,retainAll和clear operations。
答案 1 :(得分:1)