我已经获得了一项任务,我需要使用HashMap或TreeMap来保存学生列表及其成绩。我认为他们的关键是名称,价值将是学生的成绩。我被指示允许同名学生。
因为HashMap或TreeMap都不允许重复键我不能将名称作为键,对吗?
是否有一种允许重复密钥的简单方法? TreeMap如何对重复键进行排序?
我还需要能够按名称排序,所以我更喜欢使用TreeMap。
答案 0 :(得分:0)
不要寻找不同的数据结构,而是考虑可以使用 唯一的不同密钥。这是软件开发中一个非常普遍的问题,因为现实世界中的许多概念并不像我们所希望的那样独特。名字(不仅是人,还有地方和事物)都是一个典型的例子。
虽然有多种潜在的解决方案,但常见的解决方案是为每个不完全唯一的东西分配唯一标识符,并使用 作为您的密钥。所以你的地图可能如下:
Map<Integer, Person>
当然,这只会解决问题,因为你现在必须能够查找一个人的身份证,假设你只知道他们的名字。这可以通过以下方式完成:
Map<String, Set<Integer>>
其中键是名称,值是具有该名称的ID集。然后,您必须有一些特定于应用程序的方法,以便在必要时进一步消除歧义,例如要求用户选择一个。如果您需要按字母顺序排列名称,则第二个Map
可以是TreeMap
,或者您可以选择Person
实施Comparable
。