我使用两个ConcurrentHashMaps来存储以下数据我将用下面的例子
private Map<Player, FootballTeam> playerTeamMapping;
private Map<FootballTeam, League> teamLeagueMapping;
只要给定
FootballTeam
对象,我就需要能够检索Player
或League
对象并执行一些操作需要考虑的案例:
如果没有关联到
Player
条目存在,然后删除FootballTeam
条目FootballTeam
。如果a
FootballTeam
改变了它们的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);
}
}