2011-03-04 31 views
4

Colelction.unmodifiableMap是否維護迭代次序?Collection.unmodifiableMap迭代次序

我在嘗試newMap.put(key,Collections.ModifiableMap(oldMap)) 然後,當我做newMap.get(key)並迭代時,迭代順序似乎改變了。

我們如何保護迭代次序?

回答

4

結帳Collections.unmodifiableSortedMap。這應該會在您的地圖上爲您提供只讀視圖並維護按鍵的排序順序。

+0

作者在評論中只提到了這一點,但他使用LinkedHashMap,它具有與SortedMap不同的迭代順序。 'Collections.unmodifiableSortedMap'返回'類java.util.Collections中的方法unmodifiableSortedMap不能應用於給定的類型; [錯誤] required:java.util.SortedMap [錯誤] found:java.util.LinkedHashMap [錯誤]原因:無法推斷類型變量K,V [ERROR](argument mismatch; java.util.LinkedHashMap 無法轉換爲java.util.SortedMap )' – yegeniy 2015-04-21 14:26:03

4

UnmodifiableMap只是簡單地委託所有的方法,除了寫入方法。它的順序就是代表的意思。

如果您需要與第一個集合具有相同的順序,請使用LinkedHashMap。

+0

忘了提及,我的確在使用LinkedHashMap。 – Chandra 2011-03-04 01:10:05

1

如果我們查看Collections.unmodifiableMap的源代碼,我們看到它只是將它傳遞給一個UnmodifiableMap類,它只是簡單地包裝它。所以它不會改變底層地圖的順序。

而且根據對unmodifiableMap文檔它說:

返回 指定映射的不可修改視圖。

因爲它說,它返回一個視圖,它意味着我們沒有得到一個不同的地圖,只是以不同的方式來訪問舊地圖。

+2

我以爲是一樣的,但不可修改的地圖揭示了它的真實色彩當我嘗試它:) – Chandra 2011-03-04 06:22:53