我已经考虑过按值here对HashMap进行排序,但我不太清楚如何提取顶部' n'这个已排序的HashMap的条目。或者有更好的方法来实现这个目标吗?
为了提供一些概述,我正在开发一个P2P项目,并且我在peerID和相应的速率之间保持映射,从这些速率可以从每个对等端下载文件。然后我需要选择顶部' n'下载率最高的同行。
答案 0 :(得分:2)
我认为您可能会考虑使用TreeSet
类而不是HashMap
,因此您可以始终对它们进行排序。访问' n'您可以使用Iterator或subSet()
,tailSet()
方法,具体取决于您的需求。
答案 1 :(得分:2)
显然,带有自定义比较器的TreeMap
是更好的选择,特别是因为它有一个专门为此定制的方法:headMap(Key k)
它将为您提供的所有条目这个键。
另一方面,如果你坚持HashMap
,你可以使用java-8:
yourMap.entrySet()
.stream()
.sorted(Comparator.comparing(e -> e.getValue(), Comparator.reverseOrder()))
.limit(n)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));