天天看点

【深入Java基础】LinkedHashMap的特点与原理

LinkedHashMap的特点与原理

一般来说HashMap的无序的,及内部的存储顺序和输出顺序不一定相同(除非输入key的hash值是有序的)。而LinkedHashMap则是有序的。LinkedHashMap同样支持null键和值,并且值可以重复,它也是不同步的。

它的有序性表现为两种:

1.遍历输出的顺序与put顺序一致

2.按访问顺序输出

按输入顺序遍历输出,这个好理解:

输出:

按照访问顺序输出,就是被访问的entry会被链表链接到尾部:

可以看到1=aa在被访问过后跑到了最后一个。

这里的LinkedHashMap有三个参数:

initialCapacity和loadFactor和hashmap里的一样,分别是初始化容量和装载因子(默认为0.75)。accessOrder为是否按照访问顺序排列,如果是,则被访问的entry将排列到最后一个,默认是false,即按照输入顺序排列。

LinkedHashMap继承了HashMap并实现了Map接口。所以它具有HashMap的所有特性。并且内部对数据的存储也是数组加链表的形式。但是它多了一个双向链表来维护内部数据的顺序关系。

Entry的定义

LikedHaashMap的Entry继承了HashMap的Entry,并且多了<code>Entry&lt;K,V&gt; before, after;</code>,用于双链表的前驱后继节点。

具体的操作就不看了,会用就好。

关于LinkedHashMap的几个问题

问  题

答      案

LinkedHashMap是否允许键值对为空

Key和Value都允许空

LinkedHashMap是否允许重复数据

Key重复会覆盖、Value允许重复

LinkedHashMap是否有序

有序

LinkedHashMap是否线程安全

非线程安全

网络上志同道合,我们一起学习网络安全,一起进步,QQ群:694839022