2010-09-28 107 views
19

我需要Google Collection的組合ImmutableMapLinkedHashMap —具有定義迭代次序的不可變映射。看起來ImmutableMap本身實際上已經定義了迭代次序,至少是its documentation saysGoogle Collections ImmutableMap迭代次序

一個不可變的基於散列的Map,具有可靠的用戶指定的迭代次序。

但是沒有更多的細節。快速測試表明這可能是真實的,但我想確保。不幸的是,快速查看源代碼並不能幫助我。

我的問題是:我可以依賴ImmutableMap的迭代順序嗎?如果我做ImmutableMap.copyOf(linkedHashMap),它是否會具有與原始鏈接哈希映射相同的迭代順序?那麼由構建者創建的不可變映射怎麼樣?由於谷歌沒有發現任何有用的東西,因此一些權威答案的鏈接將有所幫助。 (不,鏈接到源不計算在內)。

+0

我相信藏品已經被摺疊到番石榴圖書館。但ImmutableMap的文檔也是一樣的。 – Thilo 2010-09-28 08:06:24

回答

17

更確切地說,ImmutableMap工廠方法和構建器返回實例遵循輸入的迭代順序時提供在構建的地圖。但是,ImmutableSortedMap是ImmutableMap的子類。排序鍵。

4

你應該相信javadoc。如果還不夠,請閱讀源代碼或報告錯誤。

快速查看源代碼顯示映射由數組支持,並且迭代將通過也由數組支持的ImmutableSet完成。所以我認爲文檔是正確的,元素的順序將保持原樣。

19

我居然發現討論此事,以answers from library authors

凱文Bourrillion:我們所說的「用戶指定的」是什麼「可以,你想讓它 是什麼令」;換句話說,無論您在 的首位提供給我們的條目是什麼,這就是我們使用的順序。

Jared Levy:您還可以複製具有所需順序的TreeMap或LinkedHashMap。

是的,我應該相信javadoc,儘管我認爲javadoc在這種情況下可以更好。看起來我並不是第一個被它弄糊塗的人。如果沒有別的,這個Q/A將幫助谷歌下次有人搜索「ImmutableMap迭代」:-)

+3

+1我同意你的看法,JavaDoc可能會更清晰。 「可靠的用戶指定迭代順序」可能沒有其他解釋,但對copyOf()方法有一點冗餘的註釋,它保持源映射的迭代順序不會受到傷害。 of()系列的方法確實有這種評論(「按照順序返回包含給定條目的不可變映射」)。 – Thilo 2010-09-28 08:12:43

+0

@Thilo:啊,我沒有注意到這些()方法的註釋。謝謝。 – 2010-09-28 08:13:48