图解LinkedHashMap

 

LinkedHashMap,总的来说,LinkedHashMap底层是使用HashMap+LinkedList实现的。用HashMap维护数据,用LinkedList来维护数据插入的顺序。

 

一、特点总结:

1、LinkedHashMap的结构是数组+链表(+红黑树)+双向链表。双向链表是用来维护元素的顺序的。HashMap的元素是无序的,LinkedHashMap的元素是有序的。LinkedHashMap的存取数据的方式还是跟HashMap一致。

2、和HashMap的不同之处有:遍历方式不一样(扩容是用到遍历),HashMap根据按数组顺序来遍历,如果遇到链表,则依次遍历链表中的元素,完了之后继续遍历数组的元素。而LinkedHashMap是按双向列表来遍历的,所以LinkedHashMap遍历的性能比HashMap高一点,因为HashMap中有空元素。

3、LinkedHashMap中双向链表的顺序是按元素添加的顺序的,新添加的元素被加到双向链表的末尾。LinkedHashMap还有一个accessOrder属性,可以在new LinkedHashMap的时候传进去,accessOrder默认为false,表示访问元素不改变双向链表中元素的顺序,如果accessOrder为true,则访问元素的时候,即get一个元素的时候,会把该元素移动(先删除后添加,修改before和after指向)到双向链表的末尾。

4、LinkedHashMap和HashMap都是线程不安全的。

 

二、使用场景:

可以使用LinkedHashMap来实现FIFO和LRU缓存算法。

FIFO缓存算法:如果链表有长度限制的话,最新添加的元素在链表头,最旧的元素在链表尾,最旧的元素被首先删除。

LRU缓存算法:最近最少使用(被删)。如果链表有长度限制的话,最新添加的元素在链表的头部,如果一个元素被访问了,那么这个元素会被移动到链表头部,链表尾部的元素(最近最少被添加或访问)首先被删除。

如果accessOrder设置为false就是FIFO算法。

如果accessOrder设置为true就是LRU算法。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值