是正常的,我有两个相同的哈希码?我很困惑。我认为哈希码是唯一的。
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
答案 0 :(得分:-1)
是的,123
和123
具有相同的哈希码,因为这两个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!
合同允许不相等的对象共享相同的哈希码,例如上面草图中的“A”和“μ”对象。
这是显而易见的,因为可能的不同对象的数量通常大于可能的哈希码的数量(2 ^ 32)。
答案 2 :(得分:-2)