当前位置:  开发笔记 > 编程语言 > 正文

为什么具有相同哈希码的对象不相等

如何解决《为什么具有相同哈希码的对象不相等》经验,为你挑选了3个好方法。

我在书中发现了这句话:

如果两个对象的哈希码是等于的,那么这可能并不意味着对象是等于的.

有人可以解释一下这句话吗?



1> Eran..:

例如,考虑Long类的两个对象.由于hashCode返回a int,并且long(和Long)类型的范围大于int,这意味着必须有两个Long具有相同的对象,hashCode即使它们彼此不相等.



2> G. Demecki..:

答案很简单:hashCode()意外地可以为两个完全不同的物体产生相同的数字.


如果它是随机数,则哈希码将不起作用.默认实现是哈希码基于一些内部JDK机制,通常是对象的内存位置.**哈希码永远不会随机**.
我认为"_accidentally can produce_"是downvotes的来源.这意味着hashcode是一种产生随机值的随机魔术方法.事实上,产生冲突的决定是非常谨慎的**.决定产生哪些冲突是一项重要的性能优化.
当然,HotSpot中`hashCode`的默认实现是一个随机数.如果你覆盖它,那么它不再是一个随机值.例如,参见[this post](http://stackoverflow.com/a/26975908/1037316).

3> user1121883..:

哈希码是一个数字值,用于在基于哈希的集合中插入和标识对象。

它是一个固定的大小值,因此它对于每个现有对象都不是唯一的,因此有时会遭受碰撞。基本上,hashCode()可以为两个不同的对象产生相同的值。

例:

    String first = "wh";
    String second = "xI";
    System.out.println(first.equals(second));
    System.out.println(first.hashCode() + " " + second.hashCode());

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有