如何在HashMap中获取两个最高值<string,integer =“”> </string,>

时间:2014-12-17 22:00:39

标签: java hashmap set

我有一个由两种类型组成的HashMap:String 作为键,它们是玩家名称,Integer 作为值,这些都是得分

我正在创建一个排名系统,为此,我需要从这个HashMap 获得两个最高值,所以前两个参与者put进入它。


例如:

如果这些是我的HashMap的值:

  Key         Value

String1         1
String2         2
String3         3
String4         4
String5         5

我想要一种只返回String4String5的方法。

我认为获取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;});

但这也不是很有效,但这对我的表现来说太慢了。


如何获得两个最高值?

1 个答案:

答案 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();
    }
}

正如其他人在评论中所述;这可能不是最好的方法,因为您可以使用不同的键具有相同值的多个值。如果使用arrayArrayListjava.util.Collections类中的内容后使用索引编制。