2016-08-16 25 views
2

有由LinkedHashMap.java使用的字段:LinkedHashMap中'accessOrder'字段的用途是什麼?

final boolean accessOrder; 

的LinkedHashMap的構造函數是:

public LinkedHashMap(int initialCapacity, 
         float loadFactor, 
         boolean accessOrder) { 
     super(initialCapacity, loadFactor); 
     this.accessOrder = accessOrder; 
    } 

我想知道現場accessOrder的目的。如果accessOrder是'true'和'false',請給出一個區分的例子。是否有任何其他方式來更新已創建對象的accessOrder字段?

+0

鏈接哈希映射的迭代排序方法:訪問順序爲「true」,插入順序爲「false」。 – DimaSan

+1

它在[Javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)中有詳細說明。你不瞭解哪部分? – EJP

回答

4

LinkedHashMap的條目可以按照鍵首次添加到Map(這是默認行爲)或根據訪問順序(即,最近訪問的條目將是最後迭代的條目)迭代, 。

通過將true傳遞給該構造函數中的accessOrder參數,您說您希望根據訪問順序(而不是插入順序)遍歷條目。

Map<Integer,String> insertOrder = new LinkedHashMap<>(16,0.75f,false); 
Map<Integer,String> accessOrder = new LinkedHashMap<>(16,0.75f,true); 

insertOrder.put (1,"a"); 
insertOrder.put (3,"c"); 
insertOrder.put (2,"b"); 
String v = insertOrder.get(3); 

accessOrder.put (1,"a"); 
accessOrder.put (3,"c"); 
accessOrder.put (2,"b"); 
v = accessOrder.get(3); 

System.out.println(insertOrder); 

System.out.println(accessOrder); 

輸出:

{1=a, 3=c, 2=b} // the last inserted key (2) is last 
{1=a, 2=b, 3=c} // the most recently accessed key (3) is last 
0

其用於創建訪問順序LinkedHashMap的構造,是如下:

LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) 

構造具有指定初始容量的空LinkedHashMap實例,加載因子和accessOrder。

如果accessOrder爲false,則會導致放置順序。

如果accessOrder爲true,那麼它將導致訪問Order。訪問順序LinkedHashMap的一個重要應用是構建LRU緩存。