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

smc*_*smc 5 linkedhashmap

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

我试图理解为什么选择DLL而不是S(ingle)LL我用DLL获得的最大优势是向后遍历,但我没有看到LinkedHashMap()利用这个优势的任何用例,因为之前没有( )Iterable接口中的next()类操作.

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

Neo*_*ker 8

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

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

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