[英]Data structure to represent Teams and Players
有一个Team
对象,其中包含播放器List<Players>
。 所有团队都需要存储在Teams
集合中。
条件:
如果一个新的播放器需要被添加到一个特定的团队,该特定车队从检索Teams
和Player
需要被添加到Players
的那支球队的名单
集合Teams
中的每个Team
对象都需要根据team name
进行唯一
集合中的Team
对象需要根据team name
进行排序。
注意事项:
在这种情况下,当我使用List<Team>
,我可以实现1,3。 但是不能满足独特性。
如果我使用TreeSet<Team>
2,3就可以实现。 但由于TreeSet上没有get
方法,因此无法选择特定的团队
所以我最终使用了TreeMap<teamName,Team>
。 这使得所有1,2,3成为可能。 但我认为这不是一个好方法
哪种数据结构适用于此用例? 最好形成Java集合。
如果您愿意,可以使用TreeSet。 但是,如果您要使用Set接口,则可以使用remove(object o)而不是get。 您将删除该对象,进行修改,然后将其添加回集合中。
如何使用Guava的MultiMap ? 更准确地说,是一个SetMultimap 。 具体来说,是一个SortedSetMultimap 。 更具体地说,它的TreeMultimap实现(1)。
说明:
MultiMap
, Key
不是指单个值 ,而是指向值Collection
。 Team
键绑定到多个Player
值的集合,以便解决Req1 。 SetMultiMap
, Key
是唯一的。 SortedSetMultimap
,还对Values
进行排序。 TreeMultimap
, Key
集及其每个Values
集合都已排序。 用法:
TreeMultimap<Team, Player> ownership = new TreeMultimap<Team, Player>();
ownership.put(team1, playerA);
ownership.put(team1, playerB);
ownership.put(team2, playerC);
Collection<Player> playersOfTeamA = ownership.get(team1); // contains playerA, playerB
SortedSet<Team> allTeams = ownership.keySet(); // contains team1, team2
Gothas:
Team
对象上正确设置equals
和hashCode
以使用其name
。 create(Comparator<? super K> keyComparator, Comparator<? super V> valueComparator)
,如果您不希望更改Team的自然顺序,则会提供特制的比较。 (使用Ordering.natural()让Player比较器保持其自然顺序 - 另一个不错的Guava事物)。 无论如何,请确保它与equals
兼容! put
荷兰国际集团新的价值的关键不删除之前保持的值(即是整点),所以一定要了解它。 (例如,它仍然认为你不能把键值对两次......) (1):我不确定是否有SortedSetMultimap就足够了。 在它的Javadoc中,它声明值已经排序,但没有说出键。 有谁知道更好吗?
(2)我向你保证,我不会以任何方式加入番石榴。 我觉得很棒!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.