2014-04-23 70 views
0

我有一個排序映射,並希望按照其對應的鍵的順序檢索值。即如果我的排序映射有(1,6),(2,4),(3,1),我想檢索[6,4,1]。如何保留排序映射的值排序?

是否有比迭代排序映射更快的東西?

SortedMap<Double, Double> sortedMap = new TreeMap<Double, Double>(sortedMap.size()); 
List<Double> values = new ArrayList<Double>(); 
for (Entry<Double, Double> entry : sortedMap.entrySet()) { 
    values.add(entry.getValue()); 
} 

我不認爲簡單地做:

values = new ArrayList<Double>(sortedMap.values()) 

因爲sortedMap.values將工作()返回一個Collection與訂單上沒有保證,但迭代在地圖上不打我的高效。

+0

的http:// docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html#values() >集合的迭代器按相應鍵的升序返回值。 – VBCPP

回答

2

sortedMap.values()返回的順序

據爲SortedMap的順序是保證文檔上沒有保證集合,請參閱:

http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#values()

+0

「集合的迭代器按相應鍵的升序返回值。」 –

+0

這太好了。在Eclipse中徘徊在.values()向我展示了Map的javadoc,而不是SortedMap,這就是爲什麼我沒有看到有關排序的部分。我會記得下一次去實際的文檔。 – Lolo

0

爲什麼你認爲迭代排序映射很慢?爲了檢索所有的值,你最終必須遍歷整個Map。所以時間複雜度總是O(n)。

+0

我假設(d)如果有可用的庫調用,它可能會比手動迭代地圖更優化。但這是一個很好的問題:我完全不知道這是一個好的假設。 – Lolo

+0

for-each循環是遍歷集合的最佳方式。而且,語言設計者已經花費了大量的精力來設計Java集合的迭代器,以確保其循環遍歷任何集合的最快方式。我想首先你需要描述一下,看看錶演是否真的很慢。 – Kakarot