LinkedHashMap排序

时间:2016-03-07 07:56:36

标签: hashmap linkedhashmap

如在LinkedHashMap的javadoc中指定的那样,如果将一个键重新插入到地图中,但是在运行以下程序时,插入顺序不受影响,我注意到在更改访问顺序时再次插入相同的键。

Map<Integer, String> map = new LinkedHashMap<Integer,String>(16, .75f, true);
    map.put(new Integer(1), "Ajay");
    map.put(new Integer(2), "Vijay");
    map.put(new Integer(3), "Kiran");
    map.put(new Integer(4), "Faiz");

    for(String value:map.values()){
        System.out.println(value);
    }

    String val =map.get(new Integer(3));
    map.put(new Integer(2), "Ravi");
    System.out.println("After changes...");
    for(String value:map.values()){
        System.out.println(value);
    }

在运行上述程序时,我得到的o / p如下:

Ajay
Vijay
Kiran
Faiz
After changes...
Ajay
Faiz
Kiran
Ravi

当我使用密钥2重新插入时,为什么它的访问顺序被更改。

请帮助我理解o / p。

谢谢,

1 个答案:

答案 0 :(得分:3)

new LinkedHashMap<Integer,String>(16, .75f, true);

使用true指定您想要一个&#34; access-ordered&#34;地图,而不是&#34;插入顺序&#34;地图。

这意味着您将按访问顺序获取值(最近最少访问)。

您的getput来电均构成&#34;访问&#34;。

  

提供了一个特殊的构造函数来创建链接的哈希映射,其迭代顺序是上次访问其条目的顺序,从最近访问到最近访问(访问顺序)。这种地图非常适合构建LRU缓存。调用put或get方法会导致访问相应的条目(假设它在调用完成后存在)。