使用O(n log n)复杂度按值对Java HashMap进行排序

时间:2012-05-22 23:14:25

标签: java collections hashmap

我知道这个问题已被多次询问和回答。但几乎所有解决方案都具有O(n ^ 2)的计算复杂度。

我正在寻找O(n log n)复杂度的解决方案。有人可以建议吗?

谢谢堆, Chaitanya

1 个答案:

答案 0 :(得分:5)

将条目复制到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());
}