我有一个由两种类型组成的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;});
但这也不是很有效,但这对我的表现来说太慢了。
如何获得两个最高值?
答案 0 :(得分:3)
尝试这样的事情。我还没有对它进行过测试,如果我忽视某些事情,请告诉我。
int highest = Integer.MIN_VALUE;
String highestString = null;
int secondHighest = Integer.MIN_VALUE;
String secondHighestString = null;
for(Map.Entry<String, Integer> pair : yourHashMap.entrySet())
{
if(highest < pair.getValue())
{
secondHighest = highest;
secondHighestString = highestString;
highest = pair.getValue();
highestString = pair.getKey();
}
}
正如其他人在评论中所述;这可能不是最好的方法,因为您可以使用不同的键具有相同值的多个值。如果使用array
,ArrayList
或java.util.Collections
类中的内容后使用索引编制。