linkhashmap原理_LinkedHashMap基本原理和用法&使用实现简单缓存(转)

一. 基本用法

LinkedHashMap是HashMap的子类,但是内部还有一个双向链表维护键值对的顺序,每个键值对既位于哈希表中,也位于双向链表中。LinkedHashMap支持两种顺序插入顺序 、 访问顺序

1:插入顺序:先添加的在前面,后添加的在后面。修改操作不影响顺序

2:访问顺序:所谓访问指的是get/put操作,对一个键执行get/put操作后,其对应的键值对会移动到链表末尾,所以最末尾的是最近访问的,最开始的是最久没有被访问的,这就是访问顺序。

LinkedHashMap 继承了HashMap,实现了Map接口

public class LinkedHashMap extends HashMap implements Map

LinkedHashMap一共提供了五个构造方法:

//构造方法1,构造一个指定初始容量和负载因子的、按照插入顺序的LinkedList

public LinkedHashMap(int initialCapacity, floatloadFactor) {super(initialCapacity, loadFactor);

accessOrder= false;

}//构造方法2,构造一个指定初始容量的LinkedHashMap,取得键值对的顺序是插入顺序

public LinkedHashMap(intinitialCapacity) {super(initialCapacity);

accessOrder= false;

}//构造方法3,用默认的初始化容量和负载因子创建一个LinkedHashMap,取得键值对的顺序是插入顺序

publicLinkedHashMap() {super();

accessOrder= false;

}//构造方法4,通过传入的map创建一个LinkedHashMap,容量为默认容量(16)和(map.zise()/DEFAULT_LOAD_FACTORY)+1的较大者,装载因子为默认值

public LinkedHashMap(Map extends K, ? extends V>m) {super(m);

accessOrder= false;

}//构造方法5,根据指定容量、装载因子和键值对保持顺序创建一个LinkedHashMap

public LinkedHashMap(intinitialCapacity,floatloadFactor,booleanaccessOrder) {super(initialCapacity, loadFactor);this.accessOrder =accessOrder;

}

从构造方法中可以看出,默认都采用插入顺序来维持取出键值对的次序。所有构造方法都是通过调用父类的构造方法来创建对象的。

举个例子:键是按照:“c”, “d”,"a"的顺序插入的,修改d不会修改顺序

@Testpublic voidtest2(){

Map seqMap = new LinkedHashMap<>();

seqMap.put("c",100);

seqMap.put("d",200);

seqMap.put("a",500);for(Entryentry:seqMap.entrySet()){

System.out.println(entry.getKey

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值