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)'怎么样? –