s********e 发帖数: 340 | 1 今天面试,被问到HashCode 和equals方法。
我们知道如果,两个类对象相同,equals 方法返回True,那么Hashcode就应该也一样。
但是,我被问到,如果两个对象 hashcode值一样,equals方法返回false,那么该如果
处理?
这个两个对象还算是相同么? |
s*****j 发帖数: 1087 | 2 That means equals() is problematic, it will cause unexpected result
especially in collection operation. |
h*******e 发帖数: 1377 | 3 说明 发生了hash冲突 collison就好比 桶形hash 不同元素经过hash 都打在了key
为代表的一个桶里,但是可能是桶上链表上的不同value. |
s********e 发帖数: 340 | 4 那么请问对于这种情况,是属于hashcode方法设计的不对呢,还是equals方法设计不对?
如果equals方法是 false, 但是hashcode方法返回的是相等。那么应该修改哪一个方法
呢?
该如何解决这个问题呢?
请详细说说,谢谢!
【在 s*****j 的大作中提到】 : That means equals() is problematic, it will cause unexpected result : especially in collection operation.
|
w****r 发帖数: 15252 | 5 没有问题啊,hashcode可以一样,而equals不一样,概率很低,但是还是有可能有
但是equals一样,那么hashcode就肯定一样了
要不然就是写方法的那个家伙有问题 |
h*******e 发帖数: 1377 | 6 “但是equals一样,那么hashcode就肯定一样了“ 这是不见得的,应该看具体怎
么定义相等。有可能equals 定义比hash算法严 equals是 hash 的子集, 也有
可能 equals和 hash 算法定义的有交集还有差集。
【在 w****r 的大作中提到】 : 没有问题啊,hashcode可以一样,而equals不一样,概率很低,但是还是有可能有 : 但是equals一样,那么hashcode就肯定一样了 : 要不然就是写方法的那个家伙有问题
|
s********r 发帖数: 176 | 7 这个两个对象不相同 if equals returns false
如果两个对象 hashcode值一样,equals方法返回false,那么该如果处理?
需要改进你的hashCode() programming, 尽管equals方法返回false, 两个对象
hashcode值也可以一样, 但不是好的hashCode() implementation,而且会影响的
hashtable的performance,需要改进,
【在 s********e 的大作中提到】 : 今天面试,被问到HashCode 和equals方法。 : 我们知道如果,两个类对象相同,equals 方法返回True,那么Hashcode就应该也一样。 : 但是,我被问到,如果两个对象 hashcode值一样,equals方法返回false,那么该如果 : 处理? : 这个两个对象还算是相同么?
|
m*****k 发帖数: 731 | 8 this is expected, this is why you need define your own equals() if you wanna
use the obj as key in HashMap,
after the same hashcode leads you to the same bucket, you need equals() to
find the obj that matches your input so to retrieve the right value.
放狗, 你一下就明白了。
比如
http://javarevisited.blogspot.com/2013/08/10-equals-and-hashcod
对?
【在 s********e 的大作中提到】 : 那么请问对于这种情况,是属于hashcode方法设计的不对呢,还是equals方法设计不对? : 如果equals方法是 false, 但是hashcode方法返回的是相等。那么应该修改哪一个方法 : 呢? : 该如何解决这个问题呢? : 请详细说说,谢谢!
|
j**********3 发帖数: 3211 | |
g*****g 发帖数: 34805 | 10 equals为 true, hashcode必须相等,否则是bug. 反之不必须。没有统计也不能以一个
例子来说hash function实现有问题。
【在 h*******e 的大作中提到】 : “但是equals一样,那么hashcode就肯定一样了“ 这是不见得的,应该看具体怎 : 么定义相等。有可能equals 定义比hash算法严 equals是 hash 的子集, 也有 : 可能 equals和 hash 算法定义的有交集还有差集。
|
|
|
h*******e 发帖数: 1377 | 11 恩又想了一下这个应该是对的,“equals为 true, hashcode必须相等,否则是bug. 反
之不必须"
后面那半句 hash function 有问题我没说过的,是别的版友说的, 我的equals 的
概念之前不太清。
【在 g*****g 的大作中提到】 : equals为 true, hashcode必须相等,否则是bug. 反之不必须。没有统计也不能以一个 : 例子来说hash function实现有问题。
|
y**********a 发帖数: 824 | 12 没有问题,以下是 hashcode 的 contract:
Whenever it is invoked on the same object more than once during
an execution of a Java application, the {@code hashCode} method
must consistently return the same integer, provided no information
used in {@code equals} comparisons on the object is modified.
This integer need not remain consistent from one execution of an
application to another execution of the same application.
If two objects are equal according to the {@code equals(Object)}
method, then calling the {@code hashCode} method on each of
the two objects must produce the same integer result.
It is not required that if two objects are unequal
according to the {@link java.lang.Object#equals(java.lang.Object)}
method, then calling the {@code hashCode} method on each of the
two objects must produce distinct integer results. However, the
programmer should be aware that producing distinct integer results
for unequal objects may improve the performance of hash tables.
【在 s********e 的大作中提到】 : 今天面试,被问到HashCode 和equals方法。 : 我们知道如果,两个类对象相同,equals 方法返回True,那么Hashcode就应该也一样。 : 但是,我被问到,如果两个对象 hashcode值一样,equals方法返回false,那么该如果 : 处理? : 这个两个对象还算是相同么?
|
s******t 发帖数: 229 | 13
同意这个,equals等了,hashcode怎么可能不等啊!! hash同一个key,value能不一样
???这还叫神马hash function啊
【在 g*****g 的大作中提到】 : equals为 true, hashcode必须相等,否则是bug. 反之不必须。没有统计也不能以一个 : 例子来说hash function实现有问题。
|
s********e 发帖数: 340 | |
s********e 发帖数: 340 | 15 今天面试,被问到HashCode 和equals方法。
我们知道如果,两个类对象相同,equals 方法返回True,那么Hashcode就应该也一样。
但是,我被问到,如果两个对象 hashcode值一样,equals方法返回false,那么该如果
处理?
这个两个对象还算是相同么? |
s*****j 发帖数: 1087 | 16 That means equals() is problematic, it will cause unexpected result
especially in collection operation. |
h*******e 发帖数: 1377 | 17 说明 发生了hash冲突 collison就好比 桶形hash 不同元素经过hash 都打在了key
为代表的一个桶里,但是可能是桶上链表上的不同value. |
s********e 发帖数: 340 | 18 那么请问对于这种情况,是属于hashcode方法设计的不对呢,还是equals方法设计不对?
如果equals方法是 false, 但是hashcode方法返回的是相等。那么应该修改哪一个方法
呢?
该如何解决这个问题呢?
请详细说说,谢谢!
【在 s*****j 的大作中提到】 : That means equals() is problematic, it will cause unexpected result : especially in collection operation.
|
w****r 发帖数: 15252 | 19 没有问题啊,hashcode可以一样,而equals不一样,概率很低,但是还是有可能有
但是equals一样,那么hashcode就肯定一样了
要不然就是写方法的那个家伙有问题 |
h*******e 发帖数: 1377 | 20 “但是equals一样,那么hashcode就肯定一样了“ 这是不见得的,应该看具体怎
么定义相等。有可能equals 定义比hash算法严 equals是 hash 的子集, 也有
可能 equals和 hash 算法定义的有交集还有差集。
【在 w****r 的大作中提到】 : 没有问题啊,hashcode可以一样,而equals不一样,概率很低,但是还是有可能有 : 但是equals一样,那么hashcode就肯定一样了 : 要不然就是写方法的那个家伙有问题
|
|
|
s********r 发帖数: 176 | 21 这个两个对象不相同 if equals returns false
如果两个对象 hashcode值一样,equals方法返回false,那么该如果处理?
需要改进你的hashCode() programming, 尽管equals方法返回false, 两个对象
hashcode值也可以一样, 但不是好的hashCode() implementation,而且会影响的
hashtable的performance,需要改进,
【在 s********e 的大作中提到】 : 今天面试,被问到HashCode 和equals方法。 : 我们知道如果,两个类对象相同,equals 方法返回True,那么Hashcode就应该也一样。 : 但是,我被问到,如果两个对象 hashcode值一样,equals方法返回false,那么该如果 : 处理? : 这个两个对象还算是相同么?
|
m*****k 发帖数: 731 | 22 this is expected, this is why you need define your own equals() if you wanna
use the obj as key in HashMap,
after the same hashcode leads you to the same bucket, you need equals() to
find the obj that matches your input so to retrieve the right value.
放狗, 你一下就明白了。
比如
http://javarevisited.blogspot.com/2013/08/10-equals-and-hashcod
对?
【在 s********e 的大作中提到】 : 那么请问对于这种情况,是属于hashcode方法设计的不对呢,还是equals方法设计不对? : 如果equals方法是 false, 但是hashcode方法返回的是相等。那么应该修改哪一个方法 : 呢? : 该如何解决这个问题呢? : 请详细说说,谢谢!
|
j**********3 发帖数: 3211 | |
g*****g 发帖数: 34805 | 24 equals为 true, hashcode必须相等,否则是bug. 反之不必须。没有统计也不能以一个
例子来说hash function实现有问题。
【在 h*******e 的大作中提到】 : “但是equals一样,那么hashcode就肯定一样了“ 这是不见得的,应该看具体怎 : 么定义相等。有可能equals 定义比hash算法严 equals是 hash 的子集, 也有 : 可能 equals和 hash 算法定义的有交集还有差集。
|
h*******e 发帖数: 1377 | 25 恩又想了一下这个应该是对的,“equals为 true, hashcode必须相等,否则是bug. 反
之不必须"
后面那半句 hash function 有问题我没说过的,是别的版友说的, 我的equals 的
概念之前不太清。
【在 g*****g 的大作中提到】 : equals为 true, hashcode必须相等,否则是bug. 反之不必须。没有统计也不能以一个 : 例子来说hash function实现有问题。
|
y**********a 发帖数: 824 | 26 没有问题,以下是 hashcode 的 contract:
Whenever it is invoked on the same object more than once during
an execution of a Java application, the {@code hashCode} method
must consistently return the same integer, provided no information
used in {@code equals} comparisons on the object is modified.
This integer need not remain consistent from one execution of an
application to another execution of the same application.
If two objects are equal according to the {@code equals(Object)}
method, then calling the {@code hashCode} method on each of
the two objects must produce the same integer result.
It is not required that if two objects are unequal
according to the {@link java.lang.Object#equals(java.lang.Object)}
method, then calling the {@code hashCode} method on each of the
two objects must produce distinct integer results. However, the
programmer should be aware that producing distinct integer results
for unequal objects may improve the performance of hash tables.
【在 s********e 的大作中提到】 : 今天面试,被问到HashCode 和equals方法。 : 我们知道如果,两个类对象相同,equals 方法返回True,那么Hashcode就应该也一样。 : 但是,我被问到,如果两个对象 hashcode值一样,equals方法返回false,那么该如果 : 处理? : 这个两个对象还算是相同么?
|
s******t 发帖数: 229 | 27
同意这个,equals等了,hashcode怎么可能不等啊!! hash同一个key,value能不一样
???这还叫神马hash function啊
【在 g*****g 的大作中提到】 : equals为 true, hashcode必须相等,否则是bug. 反之不必须。没有统计也不能以一个 : 例子来说hash function实现有问题。
|
s********e 发帖数: 340 | |
s********e 发帖数: 340 | |
T*********g 发帖数: 496 | 30 这个回答完全不对。
相同hashcode不同equals是非常正常的Hash冲突。这只能说明这两个对象不同。
【在 s*****j 的大作中提到】 : That means equals() is problematic, it will cause unexpected result : especially in collection operation.
|