LinkedHashMap的impl - 使用双链表,而不是单链表;为什么

时间:2012-10-27 02:40:36

标签: linkedhashmap

正如我提到LinkedHashMap的文档,它说,内部维护双链表(DLL)

我试图理解为什么选择DLL而不是S(ingle)LL 我使用DLL获得的最大优势是向后遍历,但我没有看到LinkedHashMap()利用这一优势的任何用例,因为在Iterable接口中没有像next()那样的previous()操作。

任何人都可以解释为什么是DLL,而不是SLL?

1 个答案:

答案 0 :(得分:7)

这是因为使用额外的哈希映射,您可以在O(1)中实现删除。如果您使用的是单链表,则删除将采用O(n)。

考虑用于存储键值对的哈希映射,以及具有指向链表中的节点的键的另一个内部哈希映射。删除时,如果它是一个双向链表,我可以轻松找到前一个元素并使其指向以下元素。单链表无法实现这一点。

http://www.quora.com/Java-programming-language/Why-is-a-Java-LinkedHashMap-or-LinkedHashSet-backed-by-a-doubly-linked-list