1
我知道這個問題已被詢問並回答了很多次。但幾乎所有的解決方案的計算複雜度爲O(n^2)。通過使用O(n log n)複雜度對值進行排序java HashMap複雜度
我正在尋找O(n log n)複雜度的解決方案。有人可以建議嗎?
由於堆, 切塔尼亞
我知道這個問題已被詢問並回答了很多次。但幾乎所有的解決方案的計算複雜度爲O(n^2)。通過使用O(n log n)複雜度對值進行排序java HashMap複雜度
我正在尋找O(n log n)複雜度的解決方案。有人可以建議嗎?
由於堆, 切塔尼亞
複製的條目到List
,排序List
由值;複製回LinkedHashMap
。我認爲一個更好的解決方案甚至是不可能的。
List<Entry<K, V>> entries = new ArrayList<Entry<K, V>>(map.entrySet());
Collections.sort(entries, new Comparator<Entry<K, V>>() {
public int compare(Entry<K, V> left, Entry<K, V> right) {
return left.getValue().compareTo(right.getValue());
}
}
Map<K, V> sortedMap = new LinkedHashMap<K, V>(entries.size());
for (Entry<K, V> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
}
可能重複http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java這與'噢答案( n)'複雜度 – noMAD
爲什麼不使用TreeMap?編輯 - 這也是noMAD鏈接問題中的建議。 – rob
@noMAD關聯的問題的答案有幾個嚴重的缺陷(正如對該答案的評論中所建議的那樣)。特別是,如果幾個鍵映射到相同的值,事情將_break._如果您調用'map.get(key)'而不是源映射中的鍵,那麼堆棧跟蹤混亂將導致幾乎不可預知的異常。那麼解決方案'O(n)'怎麼樣? –