【问题标题】:Issues with HashMap with Integer as key [closed]以整数为键的 HashMap 问题[关闭]
【发布时间】:2012-11-02 00:58:25
【问题描述】:

您好,我在使用 HashMap 时遇到问题,其中 Integer 是键。

当我使用 Integer 作为地图的键时,我得到的结果不一致。

我读过几篇文章表明,如果我使用Integer 作为Hashmap 中的键,我需要确保Integer 类的覆盖和hashcode 方法都被覆盖。在 Integer 类中,方法 equals() 已被覆盖。现在如何覆盖equals() 方法。

【问题讨论】:

  • 你能举一个你遇到的不一致结果的例子吗?
  • 我已经发布了一个潜在问题的答案,但我也同意其他评论者的观点,您没有通过示例代码真正解释过您实际遇到的问题。

标签: java hashmap


【解决方案1】:

使用整数作为 HashMap 的键,原则上没有问题。

然而,一个微妙的问题是,就对 equals() 的调用而言,包含相同数值的不同类的数量包装器不匹配

例如,如果我这样做:

map.put(3, "Test")

然后尝试像这样检索值:

long x = 1;
map.get(x + 2)

将找不到原始值。如果你依赖自动装箱而不考虑事情,你偶尔会遇到这个问题。

【讨论】:

  • 这怎么可能? map.get(x+2) 应该和map.get(3) 做同样的事情。表达式将首先被评估,然后才转换为整数。我错过了什么?
【解决方案2】:

java.lang.Integer 已经覆盖了equalshashCode,就像内置库中提供的任何值类型一样。你不需要做任何事情。

【讨论】:

  • 谢谢,我不知道为什么我得到不一致的结果。仅当 key 的 int 值大于 40 时才会发生这种情况 flowSession.getInterviewAnswers().put(Integer.parseInt(43), listOfInterviewAnswers);它有时将结果保存在表中的第 42 个位置。当实际第 42 个值通过时,此条目将被覆盖
  • @user1792972 这是一个疯狂的猜测,但您是否在代码中的任何位置使用== 来比较Integers?
  • @user1792972 - 除非您发布代码,否则我们只能猜测。
猜你喜欢
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2021-02-26
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2019-01-10
相关资源
最近更新 更多