我使用两个ConcurrentHashMaps来存储以下数据我将用下面的例子

private Map<Player, FootballTeam> playerTeamMapping;
private Map<FootballTeam, League> teamLeagueMapping;

只要给定FootballTeam对象,我就需要能够检索PlayerLeague对象并执行一些操作
需要考虑的案例:
如果没有关联到
Player条目存在,然后删除FootballTeam条目
FootballTeam
如果aFootballTeam改变了它们的teamLeagueMapping,但是aPlayer
条目存在,然后删除FootballTeam条目
FootballTeam只有在没有其他玩家引用
FootballTeam
到目前为止,我使用了上面定义的两个映射,但出于学习的目的,我被告知需要定义自己的数据结构来解决这个问题。
我正在考虑创建一个泛型类teamLeagueMapping,它由两个mapFootballTeam支持。这是最好的方法吗删除时,我需要基本上保持三个映射同步,因此在删除条目时(我需要确保对这两个映射执行这些操作)。

最佳答案

可以使用现有的类来表示映射。
League应该有Set<FootballTeam>并且FootballTeam应该有Set<Player>并且联赛和足球队都应该有实用的方法来添加或删除球队中的球员以及添加或删除联赛中的球队。

public class League {
    Set<FootballTeam> teams = new HashSet<FootballTeam>();

    public void addPlayer(FootballTeam team, Player player) {
        team.addPlayer(player);
        teams.add(team);
    }

    public void removePlayer(FootballTeam team, Player player) {
        team.removePlayer(player);
        teams.remove(team);
    }

    public void movePlayer(FootballTeam from, FootballTeam to, Player player) {
        from.movePlayerTo(to, player);
        if (from.getPlayers().size() == 0 ) {
            teams.remove(from);
        }
        teams.add(to);
    }
}

public class FootballTeam {
    private Set<Player> players = new HashSet<Player>();

    public void addPlayer(Player player) {
       player.setTeam(this);
       players.add(player);
    }

    public void removePlayer(Player player) {
       player.setTeam(null);
       players.remove(player);
    }

    public void movePlayerTo(FootballTeam to, Player p) {
       player.setTeam(to);
       players.remove(p);
    }
}

09-11 17:54