这段代码如何遍历 HashMap 的 Integer 值?

How does this code iterate through the Integer value of the HashMap?

我刚刚完成了 Sololearn 课程,在该课程中我必须编写代码以从 HashMap 中获取得分最高的玩家。但是我不明白这段代码怎么知道我对值感兴趣,而不是对键感兴趣:

public void getWinner(){
    String nameArr[] = new String[players.size()];
    nameArr = players.keySet().toArray(nameArr);
     
    String bestplayer = nameArr[0];
    int maxValue = players.get(nameArr[0]);
    
    for(String player : nameArr){
        if(players.get(player) > maxValue){
            bestplayer = player;
            maxValue = players.get(player);
    }
    }
    System.out.println(bestplayer);
    }

如您所见,程序以某种方式自动知道我需要播放器的整数值,而不是包含其名称的字符串。

HashMap 包含他们的名字作为键,他们的分数作为整数。

来自docs for get(Object key)

Returns the value to which the specified key is mapped

例如 int val = players.get(player):

  • HashMap 是 players(映射 <String, Integer>
  • 键是 player 数据类型 String
  • 返回值为 val 数据类型 Integer 可以与 maxValue
  • 进行比较

如您所见,players 是一个 HashMap,这意味着它有一个包含字符串键和整数值的键值对,对吗?所以要从 HashMap 中获取值,你需要调用一个 get(key) 函数,这就是这段代码所做的:

int maxValue = players.get(nameArr[0]);

现在他是怎么知道HashMap的键的是通过这段代码:

 String nameArr[] = new String[players.size()];
 nameArr = players.keySet().toArray(nameArr);

首先它创建了一个与哈希图大小相同的字符串数组,然后取出键集并将其转换为数组。我们在最后一部分看到的 for 循环是通过遍历键集数组并通过 HashMap.get(String key)

取出值来计算玩家的最高分