2013-01-31 38 views
7

它在LinkedHashMap Javadocs提到:LinkedHashMap的順序問題

特別是,collection視圖操作不影響底層映射的迭代順序。

「對收集視圖的操作」是什麼意思?

+0

「集合視圖上的操作」表示對LInkedHashMap本身的操作。請覆蓋我的[LinkedHashMap的內部生活](http://volodial.blogspot.com/2013/07/internal-life-of-linkedhashmap-in-java.html)教程 –

回答

7

collection-views of Maps是通過返回的對象:在

  • Map#keySet()
  • Map#values()
  • Map#entrySet()

操作那些只是意味着任何方法調用集合,視圖實例。

+0

這些視圖中的任何操作如何更改迭代順序,因爲你不能添加或獲取? – assylias

+0

@assylias我不確定;理論上迭代集合視圖? –

+1

LinkedHashMap具有一個通過最近訪問來排序元素的構造函數,因此完全可以想象,對集合視圖包含或其他查找操作可能會影響迭代順序。 –

3

如果我理解的很好,也許我沒有,收集視圖是通過其抽象獲得的Collection,如entrySet,values和keySet。

這些集合中的操作不會影響訪問內部對象的順序LinkedHashMap當您使用特殊構造函數使得您的對象按訪問順序排序時。

+2

我需要學習鍵入更快哈哈:) –

7

這個測試應該展示它是如何工作

Map m = new LinkedHashMap(16, 0.75f, true); 
    m.put(1, 1); 
    m.put(2, 2); 
    m.put(3, 3); 
    System.out.println(m); 
    m.get(2); 
    System.out.println(m); 
    Set keys = m.keySet(); //API: Returns a Set view of the keys contained in this map. 
    keys.iterator().next(); 
    System.out.println(m); 

輸出

{1=1, 2=2, 3=3} 
{1=1, 3=3, 2=2} 
{1=1, 3=3, 2=2} 

即,訪問入口2-2改變了迭代順序,並在訪問的第一項1-1 keySet視圖沒有

+2

爲例。 – assylias