【问题标题】:How to count key values in a HashMap如何计算 HashMap 中的键值
【发布时间】:2015-07-18 00:19:36
【问题描述】:

我基本上是在为游戏写这个,但我被卡住了..

我们基本上有 2 个团队

public enum TeamType {
   TEAM_ONE,
   TEAM_TWO;
}

private Optional<TeamType> team;

还有一个哈希图

private Map<TeamType, Player> teamPlayers = new HashMap<>();

我们如何计算一个团队类型中的玩家数量? (返回一个数值)

teamPlayers.get(TeamType.ZAMORAK).size(); 

不可能。

【问题讨论】:

  • A Map&lt;TeamType, Player&gt; 不适合这个。 MultiMap&lt;TeamType, Player&gt; 是。
  • 每个key的value个数为1,value的个数等于key的个数,由Map.size()给出。你的问题没有意义。
  • EJP 再读一遍这个问题,很有意义。我想返回一个团队中球员的数值。不是整个地图。 @Weston 已经回答了我的问题
  • 与问题没有直接关系,但如果 TeamType 是枚举,则应该使用 EnumMap。然而,这似乎是一个坏主意。
  • 不要(完全)在回答后更改您的问题。

标签: java


【解决方案1】:

根据 Java 的文档,HashMaps 不能用于每个键的多个值。您应该仔细查看您当前的代码在做什么。 Sotirios 建议使用 MultiHashMap,它适用于有类似问题的人,但由于您只有两个团队,您可能需要考虑另一种选择。

如果你使用 MultiHashMap,teamPlayers.get(TeamType.ZAMORAK).size(); 将返回 ZAMORAK 队大小的球员集合。

【讨论】:

    【解决方案2】:

    如果是玩家列表:

    private Map<TeamType, List<Player>> teamPlayers = new HashMap<>();
    

    这可行:

    teamPlayers.get(TeamType.TEAM_ONE).size();
    

    当然你需要初始化一个空的玩家列表:

    teamPlayers.put(TeamType.TEAM_ONE, new ArrayList<Player>());
    teamPlayers.put(TeamType.TEAM_TWO, new ArrayList<Player>());
    

    然后将玩家添加到团队中:

    teamPlayers.get(TeamType.TEAM_ONE).add(new Player());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多