LinkedHashMap和LinkedHashSet中没有ListIterator

3
尽管文档明确指出LinkedHashMap和LinkedHashSet都维护了一个穿过所有条目的双向链表,但我不明白为什么这些实现不返回ListIterator以进行前后导航。有人了解底层的限制吗?
2个回答

5
一个ListIterator打开了通过它们“在迭代器的当前位置”插入的可能性。但这会破坏LinkedHashMap/Set强制执行的排序,因为它们的合同规定列表顺序严格等于插入顺序。

听起来很合理,令人困惑的是LinkedList确实返回一个ListIterator。与我提到的结构类似,LinkedList是双向链接的,应该维护原始插入顺序。 - DED
不。LinkedList 允许在指定位置插入。 - Erwin Smout
我明白了,因为它实现了List接口,而LinkedHashMap/Set没有。然后,在获取反向迭代器时,双向链接是有用的。 - DED

0

你不能直接迭代键/值对的数据结构,因为它不是一个集合。即使在内部有一个双向链表来记住插入顺序,你仍然必须按标准方式获取迭代器。

这些数据结构上有返回键、值或条目(键+值)集合的方法:keySet()values()entrySet(),你可以从中获取迭代器。

也许你想要的是 map.entrySet().iterator(),虽然我同意这是一个集合,而且顺序在技术上是未指定的...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接