一. 基本用法
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