通常我不会质疑所提出的模型的有效性,但是......难道球队是那些拥有很多球员而不是相反的球队更有意义吗?
无论如何,假设球员姓名不能被以不同球员姓名再次出现的球队更改:
BufferedReader input = ...;
Map<String,Player> playersByName = new HashMap<String,Player>();
String line;
while ((line = input.readLine()) != null) {
String playerName;
String teamName;
// code to parse the player and team names from 'line' comes here.
Player player = playersByName.get(playerName);
if (player == null)
playersByName.put(playerName,player = new Player(playerName));
Team team = new Team(teamName);
if (!player.getTeams().contains(team))
player.getTeams().add(team);
}
该代码假定 Player 构造函数创建一个空的团队列表。
Set
尽管上面的方法可以使用列表来保存玩家的团队,但如果该玩家拥有的团队数量可能很大,我建议您使用 a代替以提高效率。在这种情况下,您不需要最后一个条件,您可以直接添加。
List
如果您完全隐藏orSet
实现并添加操作以在 Player 类中安全地操作团队列表,那就更好了。
请记住,如果您使用(散列)Set
解决方案(隐藏或公开),则需要在类中适当地覆盖equals
andhashCode
函数Team
(将它们委托给它的名称会很好)。