一、概述
从源码里的第一段注释中,我们可以先了解到 LinkedHashMap
是通过哈希表和链表实现的,它通过 维护一个链表来保证对哈希表迭代时的有序性,而这个有序是指键值对插入的顺序。 另外,当向哈希表中重复插入某个键的时候,不会影响到原来的有序性。也就是说,假设你插入的键的顺序为 1
、
2
、
3
、
4
,后来再次插入
2
,迭代时的顺序还是
1
、
2
、3、
4
,而不会因为后来插入的
2
变成
1
、
3
、
4
、
2
。(但其实我们可以改变它的规则,使它变成 1
、
3
、
4
、
2
)
LinkedHashMap
的实现主要分两部分,一部分是哈希表,另外一部分是链表。哈希表部分继承了 HashMap
,拥有了
HashMap
那一套高效的操作,所以我们要看的就是 LinkedHashMap 中链表的部分,了解它是如何来维护有序性的。
LinkedHashMap
的大致实现如下图所示,当然链表和哈希表中相同的键值对都是指向同一个对象,这里把它们分开来画只是为了呈现出比较清晰的结构。