前段时间整理了一下Java集合框架中的常用的集合类,用xmind进行了归类,如下:
LinkedHashMap相比较ConcurrentHashMap和HashMap两个map类来说用的要少,但是还是想了解一下这个map的实现原理,看完发现其实很简单,从源码的行数就可以看出,HashMap有2300多行代码,而LinkedHashMap才700多行,为什么呢?
继承结构
public class LinkedHashMap
extends HashMap implements Map
LinkedHashMap是继承了HashMap,所以相当于是拥有了HashMap的特性,然后根据自身特点进行了定制。
构造方法
|
|
重要属性
|
|
put方法
在LinkedHashMap中根本找不到put方法,那只有在父类中看了,关于这一部分源码可以看HashMap这篇文章,里面有put方法的介绍,不过对于put中调用的一些关键的特殊的方法,LinkedHashMap进行了重写。
newNode方法
|
|
LinkedHashMap重写了该方法,在put进行了调用,newNode方法在新建一个结点的同时,直接将结点按照插入顺序加在了链表的末尾,而且该链表是双向链表。
replacementTreeNode
在进行红黑树转换的时候一些方法也进行了重写,如下:
get方法
|
|
小结
- 如果这样一种情形,我们需要按照元素插入的顺序来访问元素,此时,LinkedHashMap就派上用场了,它保存着元素插入的顺序,并且可以按照我们插入的顺序进行访问。
- LinkedHashMap会将元素串起来,形成一个双链表结构。可以看到,其结构在HashMap结构上增加了链表结构。数据结构为(数组 + 单链表 + 红黑树 + 双链表)。
-EOF-