2014-10-09 36 views
0

没有的ListIterator尽管文件明确规定的LinkedHashMap和LinkedHashSet中的LinkedHashMap和LinkedHashSet

维持于所有条目的运行

我不明白为什么这些一个双向链表实现不会返回ListIterator以使用next和previous进行导航。 有没有人知道引擎盖下的限制?

回答

2

的ListIterator一个打开通过将它们插入的可能性“的迭代器的当前位置”。但是这破坏了LinkedHashMap/Set本身所施加的顺序,因为它们的合约表明列表顺序将严格等于插入顺序。

+0

听起来很合理,令人困惑的是LinkedList确实会返回一个ListIterator。类似于我提到的结构,LinkedList是双链接的,应该保持原始的广告订单。 – DED 2014-10-10 08:43:11

+0

否。LinkedList允许在指定的位置插入。 – 2014-10-10 12:19:56

+0

我看到了,因为它实现了List接口,而LinkedHashMap/Set没有。然后,当获得反向迭代器时,双链接很有用。 – DED 2014-10-10 15:19:53

0

您不能直接通过不是集合的键/值对的数据结构进行迭代。即使在内部存在一个记忆插入顺序的双向链表,你仍然需要以迭代器的标准方式。

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

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