LinkedHashMap是如何维护插入顺序的

10

我了解HashMap的内部工作原理。LinkedHashMap扩展了HashMap类。那么LinkedHashMap如何能够保持插入顺序呢?我已经阅读了LinkedHashMap的javadoc,但没有详细说明。请有人帮助我理解吗?

提前感谢。


1
Javadoc 应该很少透露类内部的工作原理。你尝试过查看 LinkedHashMap 的源代码吗? - cherouvim
5
请查看此链接:http://javaopensourcecode.blogspot.co.il/2012/06/linkedhashmap.html - Maroun
真的是一个很好的链接... - Newbie
嗨,@Maroun,你有最新的链接吗? - Gautham Arunachalam
1
@GauthamArunachalam https://web.archive.org/web/20130417022355/http://javaopensourcecode.blogspot.co.il/2012/06/linkedhashmap.html - Turkhan Badalov
4个回答

9

http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html.

这种实现的想法非常简单。它扩展了常规的哈希映射(因此具有所有哈希映射的好处),但在添加元素时还构建了双向链表。

(条目也从HashMap.Entry扩展,因此它们具有指向之后和之前的指针)因此,所有条目都按顺序排列为HEAD -> Entry1 <-> Entry2 ... <-- TAIL

同时保留在标准HashSet中(我假设您熟悉其实现方式)。

现在,在迭代时使用条目的链接列表。


0

它内部维护着双向链表(Map.Entry),以便按顺序存储对象,因为双向链表存储了前一个节点和后一个节点的地址。

您也可以在源代码中进行检查。


0

0
它维护了一个链表,按照插入的顺序存储映射中的条目。这有助于保持迭代顺序,并且元素将按照它们最初添加的顺序返回。
当你开始比较时,你可能会更好地理解,因此您也会喜欢阅读这篇文章:HashMap、LinkedHashMap和TreeMap之间的区别

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