如何在HashMap或TreeMap中允许重复键?

时间:2016-06-26 18:38:38

标签: java hashmap key treemap

我已经获得了一项任务,我需要使用HashMap或TreeMap来保存学生列表及其成绩。我认为他们的关键是名称,价值将是学生的成绩。我被指示允许同名学生。

因为HashMap或TreeMap都不允许重复键我不能将名称作为键,对吗?

是否有一种允许重复密钥的简单方法? TreeMap如何对重复键进行排序?

我还需要能够按名称排序,所以我更喜欢使用TreeMap。

1 个答案:

答案 0 :(得分:0)

不要寻找不同的数据结构,而是考虑可以使用 唯一的不同密钥。这是软件开发中一个非常普遍的问题,因为现实世界中的许多概念并不像我们所希望的那样独特。名字(不仅是人,还有地方和事物)都是一个典型的例子。

虽然有多种潜在的解决方案,但常见的解决方案是为每个不完全唯一的东西分配唯一标识符,并使用 作为您的密钥。所以你的地图可能如下:

Map<Integer, Person>

当然,这只会解决问题,因为你现在必须能够查找一个人的身份证,假设你只知道他们的名字。这可以通过以下方式完成:

Map<String, Set<Integer>>

其中键是名称,值是具有该名称的ID集。然后,您必须有一些特定于应用程序的方法,以便在必要时进一步消除歧义,例如要求用户选择一个。如果您需要按字母顺序排列名称,则第二个Map可以是TreeMap,或者您可以选择Person实施Comparable

Guava库还提供了非常好的Multimap接口,使Map<K, Set<V>>等数据结构更易于使用。