LinkedHashMap的构造方法有一个是这样子的:
1 public LinkedHashMap(int initialCapacity,2 float loadFactor,3 boolean accessOrder) {4 super(initialCapacity, loadFactor);5 this.accessOrder = accessOrder;6 }
参数说明:
- initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16
- loadFactor 加载因子,使用无参构造方法时,此值默认是 0.75f
- accessOrder false: 基于插入顺序 true: 基于访问顺序
重点看看accessOrder的作用,使用无参构造方法时,此值默认是false。
那么设置成true的时候会是什么样子的呢?
1 public static void main(String[] args) { 2 Mapmap = new LinkedHashMap (16,0.75f,true); 3 map.put("1", "a"); 4 map.put("2", "b"); 5 map.put("3", "c"); 6 map.put("4", "e"); 7 8 for (Iterator iterator = map.values().iterator(); iterator 9 .hasNext();) {10 String name = (String) iterator.next();11 System.out.print(name);12 }13 }
上面的代码打印结果为:abce,很正常,按照加入的顺序打印
现在增加两行代码:
1 public static void main(String[] args) { 2 Mapmap = new LinkedHashMap (16,0.75f,true); 3 map.put("1", "a"); 4 map.put("2", "b"); 5 map.put("3", "c"); 6 map.put("4", "e"); 7 8 //new add 9 map.get("1");10 map.get("2");11 12 for (Iterator iterator = map.values().iterator(); iterator13 .hasNext();) {14 String name = (String) iterator.next();15 System.out.print(name);16 }17 }
打印结果为:ceab
这就是基于访问的顺序,get一个元素后,这个元素被加到最后(使用了LRU 最近最少被使用的调度算法)