Map接口下的LinkedHashMap详解

LinkedHashMap集合

在这里插入图片描述

LinkedHashMap是具有HashMap的特征:包括默认值、扩容机制…

唯一不同的是:LinkedHashMap能保证数据有序性(这里是插入有序,还有一个访问顺序):
插入有序:根据put的顺序
访问有序:使用到get()方法后,该键值对放将会被放在最后,每当被访问,就会排在最后。
实现上LinkedHashMap特有的属性:

底层数据结构是使用了HashMap的哈希表结构,即数组+链表;链表维护了迭代的顺序。
LinkedHashMap的Entry实体中新增before和after属性是用来构建双向链表的

LinkedHashMap特点:

  • 不可以存储重复的数据(Value键会发生新值覆盖旧值);
  • Key和Value分别可以存储最多一个NULL值;
  • 存储的数据有序,分为插入有序和访问有序;

LinkedHashMap是线程不安全的。若多线程访问,会抛出ConcurrentModificationException的异常
线程安全需要使用HashTableConcurrentHashMap或者使用Collections工具类中的SynchronizedMap方法进行线程同步。

LinkedHashMap源码分析

继承关系

public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>

由继承关系可以看出,LinkedHashMap是HashMap的子类,并且都实现了Map接口。

属性

//双向链表的头结点
transient LinkedHashMap.Entry<K,V> head;
//双向链表的尾结点
transient LinkedHashMap.Entry<K,V> tail;
//Boolean类型,顺序选择的参数
final boolean accessOrder;

Entry结点

//Entry结点及相较于HashMap的Entry结点的不同。
static class Entry<K,V> extends HashMap.Node<K,V> {
   
        Entry<K,V> before, after;
        Entry(int hash, K key, V value, Node<K,V> next) {
   
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值