java – 使用TreeMap,HashMap或LinkedHashMap中的重复键存储值

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

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

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

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

非常感谢.

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

解决方法:

我认为使用带有List的hashmap是你特别要求的.如何实例化这样一个对象的例子是:

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,但我没有看到它有太多实际用途,除非它只是一个任意的要求.

上一篇:java – 什么是LinkedHashMap以及它用于什么?


下一篇:Java里面的Map,HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap