当前位置: 首页 > 知识库问答 >
问题:

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

笪涛
2023-03-14

我目前正在做一个项目,在这个项目中,我从社会保障网站检索关于姓名的数据。基本上,我得到一个数字x,年份y和z。我必须返回从y到z的每一年的前x名。

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

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

我听说过一些方法,我可以使用诸如年份之类的内容作为键,并将值设置为名称列表或类似的内容,但我不确定如何在这样的实现中添加值。如果有任何建议,我将不胜感激!

非常感谢。

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

共有1个答案

尤飞尘
2023-03-14

我认为使用带有列表的hashmap是您特别要求的。如何实例化此类对象的示例如下:

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

请注意,我们必须使用Integer,因为Hashmaps只能处理对象。要为此添加值,可以执行以下操作:

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

但是,看看这个问题,就会发现这并不像这个那么容易,因为您必须为所有密钥实例化每个列表(这个问题专门处理多维哈希映射,但前提是相同的)。然而,正如对这个问题的回答所表明的那样,这是可行的。您应该看看它,因为我认为它将帮助您了解这一切发生了什么,但是可能适用于您的代码可能是这样的(几乎直接取自链接问题的答案):

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

编辑:如果你也不能在里面使用列表,我想你可以在里面放另一个hashmap,但是我不认为它有什么真正的用途,除非它只是一个任意的需求。

 类似资料:
  • 问题内容: 何时使用哈希图或树图? 我知道可以在需要对元素进行排序时使用TreeMap对其进行迭代。只是吗?当我只想查阅地图或某些最佳特定用途时,没有优化? 问题答案: 哈希表(通常)执行搜索操作(查找),其复杂度限制为,平均情况复杂度为;但是,二进制搜索树(BST)执行搜索操作(查找),其复杂度限制为,平均情况复杂度为。(您自己)应该了解每个(每个)数据结构的实现,以了解其优缺点,操作时间复杂度

  • 问题内容: 我想我可能已经发现Java错误。 我有一个TreeMap,其中使用了自定义比较器。但是,似乎当我将(key,value)放在已经存在的键上时,它不会覆盖该键,从而创建了重复的键。我想我已经验证了这一点,因为我尝试过 这打印出真实的。有人知道为什么会这样吗? 这是比较器代码: 问题答案: 比较器始终需要返回一致的结果,并且在TreeMap中使用时,应与equals保持一致。 在这种情况下

  • 我将一个arrayList作为我的键存储在TreeMap中,但我得到了这个异常 知道吗?谢谢

  • 我需要使一个程序,计数频率的每一个字在一个文本,另外,我需要能够返回一个列表的n个最经常的字(如果更多的字有相同的频率,他们排序的字母顺序)。还有一个单词列表是不被计算的(停止单词)。 停用词用什么结构 我认为HashSet是最有效的 HashMap添加单词的效率更高,但需要排序,TreeMap插入单词需要logn时间,但单词可以按频率排序 总体而言,什么方法更有效? 附言。@主持人我知道有一个类

  • 问题内容: 是什么区别,而在中?我没有看到输出的任何差异,因为这三个都有和。什么是? 问题答案: 这三个类都实现了该接口,并提供了几乎相同的功能。最重要的区别是通过条目进行迭代的顺序: 绝对不保证迭代顺序。添加新元素时,它甚至可以(并将)完全改变。 将根据密钥的“自然顺序”(根据其方法)(或外部提供的)进行迭代。此外,它实现了SortedMap接口,该接口包含依赖于此排序顺序的方法。 将按照条目放

  • 问题内容: 我需要对元素进行排序,但不会删除重复项。 我已经去了,因为实际上将值添加到支持的: 然后TreeMap使用 逻辑删除重复项 我写了一个在元素相等的情况下返回1而不是0的a 。因此,在元素相等的情况下,带有此元素将不会覆盖重复项,而只会对其进行排序。 我已经为简单对象测试过,但是我需要一组自定义对象。 这种方法是好的还是有更好的方法来实现呢? 编辑 实际上,我有以下类的ArrayList