【发布时间】:2014-12-17 22:00:39
【问题描述】:
我有一个由两种类型组成的 HashMap:String 作为键,它们是玩家名称和Integer 作为值,它们是分数。
我正在创建一个排名系统,为此,我需要从这个 HashMap 中获得两个最高值,所以前两个玩家put 进入它。
例如:
如果这些是我的 HashMap 的值:
Key Value
String1 1
String2 2
String3 3
String4 4
String5 5
我想要一种只返回 String4 和 String5 的方法。
我认为获得entrySet 就足够了,但是Set 中没有get 方法,所以我无法获得价值0(最高)和价值1(第二高)。
我也试过
Collections.max(map);
而且它不接受 HashMap 作为参数
和
final String[] top = new String[1];
int topInt = 0;
map.forEach((s, i) -> {if (i > topInt) top[0] = s;});
但这也不太奏效,这对我的表现来说太慢了。
如何获得两个最高值?
【问题讨论】:
-
你能说得更具体点吗?你是指
Map<Integer, String>还是Map<String, Integer>? -
您是否尝试过编写任何代码,例如遍历地图?或者更好的是 Collections.max() (docs.oracle.com/javase/7/docs/api/java/util/…),两次,在您删除最大值后第二次。
-
另外,这个应用程序的上下文是什么?性能是一个问题吗?如果是这样,每次值更改时遍历 hashmap 可能不是最好的解决方案。
-
您是否认为您的价值是独一无二的?如果三个字符串的值最高怎么办?
-
@ElliottFrisch 我试着说得更具体一些,你能验证一下这是否能解决问题吗?