2016-03-07 39 views
1

正如LinkedHashMap的javadoc中所指定的那样,如果将键重新插入到映射中,插入顺序不受影响,但在运行下面的程序时,我注意到在更改访问顺序时再次插入了相同的键。LinkedHashMap排序

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
new LinkedHashMap<Integer,String>(16, .75f, true); 

有了这true您指定要“访问有序”的地图,而不是一个“插入顺序”地图。

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

您的getput呼叫构成“访问”。

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

+0

感谢您的解释。所以javadoc语句是针对“插入有序”的映射,这个顺序在重新插入键时不受影响。 – Manish