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