Java中的hashCode方法

时间:2014-08-23 06:49:14

标签: java hashmap hashcode

是正常的,我有两个相同的哈希码?我很困惑。我认为哈希码是唯一的。

public static void main(String[] args) {
    HashMap<String, Integer> t = new HashMap<String, Integer>();

    t.put("one", 123);
    t.put("two", 123);

    System.out.println(t.get("one").hashCode());
    System.out.println(t.get("two").hashCode());
}

输出

123
123

3 个答案:

答案 0 :(得分:-1)

是的,123123具有相同的哈希码,因为这两个Integer具有相同的int值:

t.get("one") // returns an Integer with an int value of 123
t.get("two") // returns an Integer with an int value of 123

来自 docs Integer.hashCode()):

  

此对象的哈希码值,等于原始int值   由此Integer对象表示。

如有疑问,请使用来源:

     /**
  743        * Returns a hash code for this {@code Integer}.
  744        *
  745        * @return  a hash code value for this object, equal to the
  746        *          primitive {@code int} value represented by this
  747        *          {@code Integer} object.
  748        */
  749       public int hashCode() {
  750           return value;
  751       }

答案 1 :(得分:-1)

相同的强textObject必须在正在运行的进程中具有相同的哈希代码

请注意,这并不意味着以下常见误解:

Unequal objects must have different hash codes – WRONG!
Objects with the same hash code must be equal – WRONG!

enter image description here

合同允许不相等的对象共享相同的哈希码,例如上面草图中的“A”“μ”对象。

这是显而易见的,因为可能的不同对象的数量通常大于可能的哈希码的数量(2 ^ 32)。

答案 2 :(得分:-2)

Integer hashCode的内部实现返回value,或仅返回由装箱整数表示的原始int

这里有一个“哈希码冲突”。哈希码不需要是唯一的,事实上,经常“碰撞”。

更多here