在TreeMap,HashMap或LinkedHashMap中使用重复键存储值

时间:2013-12-09 05:04:10

标签: java hashmap key treemap linkedhashmap

我目前正在开展一个项目,我正在从社会安全网站上检索有关名称的数据。基本上我给了一个数字x,和y和z年。我必须从y到z的每一年返回前x个名字。

因此,从网站返回的数据是名称,等级和年份。我必须输入返回到TreeMap,HashMap或LinkedHashMap的每个名称,但我不确定如何存储它们,因为无论我使用什么作为键,都可能存在重复。这一年不是关键,因为我每年都会有前x名,因此他们都将来自同一年。如果有多年,会有几个等级1等名称,因为每年都有一个,所以这不是关键。名称本身不是关键,因为多年来同名的名字可能在前几名中。

我已经设法理解了这个项目的大部分复杂部分,但这是最简单的部分之一,我似乎无法理解!

我听说过可以使用年份作为键的方法,并使值成为名称或类似的列表,但我不确定如何在这样的实现中添加值。我非常感谢任何建议!

非常感谢。

编辑:请注意我被特别告知我必须使用TreeMap,HashMap或LinkedHashMap。我听说过MultiMap,但这不是我的选择之一。

1 个答案:

答案 0 :(得分:5)

我认为使用带有List的散列图是您特别要求的。如何实例化这样一个对象的例子是:

HashMap<Integer, List<String>> myHashMap = new HashMap<Integer, List<String>>();

请注意,我们必须使用Integer,因为Hashmaps only work with objects。要为此添加值,您可以执行以下操作:

myHashMap.get([whatever year you wanted]).add("[whatever name you want]");

然而,看看this question表明这不会像这样容易,因为你必须为你的所有密钥实例化每个List(该问题专门处理多维哈希图,但前提是相同的) 。但是,这是可行的,因为该问题的答案表明了这一点。你应该看看它,因为我认为你会帮助你理解所有这些,但是可能适合你的代码看起来像(几乎直接从链接问题的答案中获取):

if (!myHashMap.containsKey(myYear)) {
    myHashMap.put(myYear, new List<String>());
}

编辑:如果你不能在里面使用List,我想你可以在里面添加另一个hashmap,但是我没有看到它有太多实际用途,除非它只是一个任意的要求。