java如何在HashMap中获得3个最高值?
我有一个hashmap,如下所示:
HashMap<String, Integer> hm = new HashMap<String, Integer>;
hm.put("a", 1);
hm.put("b", 12);
hm.put("c", 53);
hm.put("d", 2);
hm.put("e", 17);
hm.put("f", 8);
hm.put("g", 8);
如何获取具有3个最高值的键?因此,它将返回:
"c", "e", "b"
谢谢
# 1 楼答案
我的看法是:这只跟踪树集中的前n个项目
最后的输出是
[c, e, b]
# 2 楼答案
这很难阅读,但会表现得更好:
如果您知道
PriorityQueue
是如何工作的,那么这相当简单:它在任何给定的时间点只保留n + 1
元素。在添加元素时,将逐个删除最小的元素完成此操作后,我们将元素插入数组,但顺序相反(因为
PriorityQueue
只对其头部进行排序,或者根据Comparator
将头部始终为max/min)您甚至可以将其设置为通用的,或者为此创建带有流的自定义收集器
# 3 楼答案
我的解决方案,按值排序,获得前3名并返回键列表
希望能有帮助