2014-04-09 32 views
0

SortedMap.values()使用迭代器返回集合,迭代器按升序返回值。 我需要一個快速get方法(按索引)到這個集合。我的收藏是不可修改的。是否有可能獲得SortedMap.values()的列表接口?

我的想法:創建類,實現列表接口,並保持參考集合和列表迭代。當我們收到get(int i)時:

1)if(i < = maxI)然後我們返回列表中的值。 2)if(i> maxI)然後我們通過集合迭代到i,並將元素複製到列表值(僅複製引用)。 我們將有O(1)分期付款。

是否有任何現有的實現或解決方案?

+0

通過這樣做你想達到什麼目的?使用索引訪問Map.values()的元素本身沒有任何用途。你沒有任何關於第i個索引處的信息。如果你真的只想隨機訪問元素 - 那麼簡單地直接將值複製到列表中。 – Bhaskar

+0

@Bhaskar確實如此,雖然他們說它是一個SortedMap,所以也許他們有這方面的信息。 – Radiodef

回答

2

的傳統方法是:

new ArrayList<YourType>(theSortedMap.values()); 

或者LinkedList或什麼的。所有的Collection實現類(所以Set,List等亞型)有一個構造函數,需要一個Collection<? extends E>。這通常被稱爲「轉換構造函數」。

0

如果您期望您需要訪問地圖中幾乎所有的值,那麼複雜度幾乎相同。我不會在意,只是用Arrays.asList(map.values())

0

如果你的映射是不可修改的,你可以使用第三方的庫,例如Guava,那麼你可以使用一個ImmutableSortedMap,然後調用

myImmutableSortedMap.values().asList() 

它在固定時間內返回一個隨機存取視圖。這可能比嘗試推出自己的包裝要簡單得多。

相關問題