以Integer为键的HashMap问题

时间:2012-11-02 00:58:25

标签: java hashmap

我好HashMapInteger作为关键问题。

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

我看了一些帖子,这些帖子表明,如果我在Integer中使用Hashmap作为键,我需要确保覆盖hashcode Integer方法equals()上课被覆盖了。在Integer类中,方法equals()已被覆盖。现在我如何覆盖{{1}}方法。

2 个答案:

答案 0 :(得分:5)

原则上使用Integers作为HashMap的关键是没有问题的。

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

例如,如果我这样做:

map.put(3, "Test")

然后尝试检索这样的值:

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

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

答案 1 :(得分:3)

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