LinkedHashMap的accessOrder的作用

来源:互联网 发布:雇网络维护人员要求 编辑:程序博客网 时间:2024/06/05 01:39

LinkedHashMap的构造方法有一个是这样子的:

1 public LinkedHashMap(int initialCapacity,2              float loadFactor,3                          boolean accessOrder) {4         super(initialCapacity, loadFactor);5         this.accessOrder = accessOrder;6     }

参数说明:

  1. initialCapacity   初始容量大小,使用无参构造方法时,此值默认是16
  2. loadFactor       加载因子,使用无参构造方法时,此值默认是 0.75f
  3. accessOrder   false: 基于插入顺序     true:  基于访问顺序 

重点看看accessOrder的作用,使用无参构造方法时,此值默认是false。

那么设置成true的时候会是什么样子的呢?

复制代码
 1     public static void main(String[] args) { 2         Map<String, String> map = new LinkedHashMap<String, String>(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<String> 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         Map<String, String> map = new LinkedHashMap<String, String>(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<String> iterator = map.values().iterator(); iterator13                 .hasNext();) {14             String name = (String) iterator.next();15             System.out.print(name);16         }17     }
复制代码

打印结果为:ceab 

这就是基于访问的顺序,get一个元素后,这个元素被加到最后(使用了LRU 最近最少被使用的调度算法)