我的问题是:
假设我有一个很大的棒球信息列表。这个列表中的每一个条目都是一名球员打出的本垒打,记录了他的名字和他打出本垒打时所在的球队。它看起来像这样:
Player | Team
tim eagles
john bears
frank lions
tim lions
frank bears
john lions
john bears
tim eagles
tim eagles
frank eagles
我正在尝试理解如何以这样的形式存储这些数据:每个球员都有一个键列表:值对,其中K=(球队名称),V=(为该球队打球时的本垒打次数)。这组key:value应该按照回调次数排序。
这只是我想解决问题的方法,但我真的不知道这是不是最好的方法。最终目标是能够列出表单的另一个列表:
Player | Team | Homeruns
tim eagles 3
john bears 2
frank lions 1
frank eagles 1
john lions 1
tim lions 1
frank bears 1
我该如何着手创建这样的数据结构呢?
到目前为止,我的主要想法是: ArrayList of TreeMaps,其中每个TreeMap对应一个播放器。
发布于 2016-08-04 16:26:59
不如..。
class Player{
Map<String, Integer> homeRuns;
}
然后在其他地方,你可能会有一个播放器类型的列表。
但我也同意PNS的说法,我也阅读了数据结构和POJO。
发布于 2016-08-04 16:13:30
通常,拥有嵌套的集合并不是一个好主意。而是使用具有另一个集合的自定义对象的集合。
在您的例子中,您应该有一个Player类,它有一组或一组本垒打,这也是一个自定义类。
class Player{
List<HomeRun> homeRuns;
}
class HomeRun{
String team;
}
现在,您可以让Player实现Comparable<Player>
,并根据homeRuns集合的大小对它们进行排序,然后您可以将您的Player存储在TreeSet中。
发布于 2016-08-04 16:15:20
这就是编程的方式。有许多不同的解决方案,所以这取决于您所说的需要什么。如果您知道除了在问题中提供的信息之外,您不需要更多的信息,那么使用list和map的解决方案应该没问题。然而,也许考虑一下,如果你在某个时候需要得到每支球队曾经得分的本垒打次数,或者必须添加哪个赛季的本垒打次数,你应该怎么做。
我建议研究数据库设计,这可能不是你所需要的,但我有很多关于可扩展设计的知识。
https://stackoverflow.com/questions/38772258
复制