【问题标题】:How to get players list from HashMap如何从HashMap中获取玩家列表
【发布时间】:2015-09-09 16:24:06
【问题描述】:

我为 Java 初学者找到了一个任务。这是我必须实现的接口。 我决定为 Players 使用 HashMap,但现在我注意到我必须返回一个 Player 数组,对吗? 你能帮我理解如何在 getAllPlayers() 方法中做到这一点吗? 谢谢

public class LeagueManager implements Manager{
Map<String, Player> players = new HashMap<String, Player>();
public void addPlayer(Player player) {
    players.put(player.getNick(), player);
}

public void removePlayer(Player player) {
    if (!players.isEmpty()) {
        players.remove(player.getNick());
    }
}

public Player getPlayer(String name) {
    if (!players.isEmpty() && players.containsKey(name)) {
        return (Player) players.get(name);
    } else {
        System.out.println("Error: there is no player with nick " + name);
        return null;
    }
}

public Player[] getAllPlayers() {
    if (!players.isEmpty()) {
        return null;
    } else {
        return null;
    }
}


public void addPoints (String name, int points) {
    if (players.containsKey(name)) {
        Player pl = (Player) players.get(name);
        pl.setPoints(points);
    }
}}

【问题讨论】:

  • 在调用 remove(...) 或调用 containsKey(...) 或 get(...) 之前,您无需检查集合是否为空。同样调用 containsKey(...) 然后 get(...) 会浪费 Map 上的资源,其中 null 不是相关值,您只需 get(...) 并检查结果是否不为 null。

标签: java dictionary hashmap


【解决方案1】:

使用以下内容:

public class LeagueManager {
    Map<String, Player> players = new HashMap<String, Player>();
    public void addPlayer(Player player) {
        players.put(player.getNick(), player);
    }

    public void removePlayer(Player player) {
        if (!players.isEmpty()) {
            players.remove(player.getNick());
        }
    }

    public Player getPlayer(String name) {
        if (!players.isEmpty() && players.containsKey(name)) {
            return (Player) players.get(name);
        } else {
            System.out.println("Error: there is no player with nick " + name);
            return null;
        }
    }

    public Player[] getAllPlayers() {
        if (!players.isEmpty()) {
            return players.values().toArray(new Player[players.size()]);
        } else {
            return null;
        }
    }

    public void addPoints (String name, int points) {
        if (players.containsKey(name)) {
            Player pl = (Player) players.get(name);
            pl.setPoints(points);
        }
    }
}

它根据 hashMap 的大小返回一个玩家数组。

【讨论】:

    【解决方案2】:

    您可以使用 player.values().toArray 将值作为数组获取。

    public Player[] getAllPlayers() {
        Player[] result = new Player[players.size()];
        return players.values().toArray(result);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2019-01-05
      • 1970-01-01
      • 2021-03-08
      相关资源
      最近更新 更多