Redian新闻
>
居然没有材料科学与工程的版,强烈要求申请一个
avatar
居然没有材料科学与工程的版,强烈要求申请一个# Engineering - 工程
S*C
1
书上说,一般Override equals()的时候要同时Override hashCode()
那么,如果我
1)不Override hashCode()
2)Override hashCode(),但返回一个常数,比如10
3)Override hashCode(),但随机产生一个数,而不是根据
一般的根据Object里面的Fields(e.g Employee(employeeId,name)来定
以上三种情况,后果分别是什么?Java是如何判断两个
Object是否"相等",只要equals() return true,还是同时要
hashCode()返回相同的值?
avatar
l*u
2
非常不解,
因为我觉得学材料有关或者搞材料有关的人应该很多吧。。。。
难道没有人申请啊?
支持的人来顶一个撒!!!
avatar
F*n
3
hashCode() has nothing to do with equals() technically
but conventionally if equals() return true then the other object must return
the same hashCode(). Otherwise a lot of Java programs based on this
convention (like HashMap) will mess up.

HashMap will mess up.
HashMap will not mess up but performance is done.
HashMap will mess up.
That's the convention

【在 S**********C 的大作中提到】
: 书上说,一般Override equals()的时候要同时Override hashCode()
: 那么,如果我
: 1)不Override hashCode()
: 2)Override hashCode(),但返回一个常数,比如10
: 3)Override hashCode(),但随机产生一个数,而不是根据
: 一般的根据Object里面的Fields(e.g Employee(employeeId,name)来定
: 以上三种情况,后果分别是什么?Java是如何判断两个
: Object是否"相等",只要equals() return true,还是同时要
: hashCode()返回相同的值?

avatar
g*8
4
说得对,建一个材料版吧
avatar
S*C
5
I understand that, the question is what happened if it doesn't return the
same hashCode as in my post, I know that HashMap/HashSet use the hasCode to
locate the bucket, the real question becomes, what do you mean by "mess up",
it cannot locate the bucket, or it may add duplicate records in different
bucket? but again, if equals is the same, how can duplicate records be added?
Also, how about the situation when this object is not inserted into
any collection, do any of the answers changed?

return

【在 F****n 的大作中提到】
: hashCode() has nothing to do with equals() technically
: but conventionally if equals() return true then the other object must return
: the same hashCode(). Otherwise a lot of Java programs based on this
: convention (like HashMap) will mess up.
:
: HashMap will mess up.
: HashMap will not mess up but performance is done.
: HashMap will mess up.
: That's the convention

avatar
w*e
6
re: 家属是材料的。支持....
这里肯定有很多材料的牛人吧。大家互通有无。龙年都找到理想的工作!
avatar
g*g
7
相等是查equals,不要求hashCode返回同样的值。
但是hashCode如果不返回同样的值,在HashMap一类的数据结构里
会出问题。会出现
a.equals(b) == true
hashMap.put(a, blah);
hashMap.get(b) == null;
所以你hashCode返回一个常数都没事,只不过哈希效率极低而已,
但返回不同的值就会出问题。

【在 S**********C 的大作中提到】
: 书上说,一般Override equals()的时候要同时Override hashCode()
: 那么,如果我
: 1)不Override hashCode()
: 2)Override hashCode(),但返回一个常数,比如10
: 3)Override hashCode(),但随机产生一个数,而不是根据
: 一般的根据Object里面的Fields(e.g Employee(employeeId,name)来定
: 以上三种情况,后果分别是什么?Java是如何判断两个
: Object是否"相等",只要equals() return true,还是同时要
: hashCode()返回相同的值?

avatar
s*x
8
强烈支持!

【在 l****u 的大作中提到】
: 非常不解,
: 因为我觉得学材料有关或者搞材料有关的人应该很多吧。。。。
: 难道没有人申请啊?
: 支持的人来顶一个撒!!!

avatar
S*C
9
Thanks, beside HashMap/Collection, is there any other circumstances that
we need to override equals() and hashCode()?
For example, any objectsng that need to searilze?
like web service or hibernate mapping class? If yes,what will happen
if the hashCode doesn't return the consistent value?

【在 g*****g 的大作中提到】
: 相等是查equals,不要求hashCode返回同样的值。
: 但是hashCode如果不返回同样的值,在HashMap一类的数据结构里
: 会出问题。会出现
: a.equals(b) == true
: hashMap.put(a, blah);
: hashMap.get(b) == null;
: 所以你hashCode返回一个常数都没事,只不过哈希效率极低而已,
: 但返回不同的值就会出问题。

avatar
F*9
10
re

【在 l****u 的大作中提到】
: 非常不解,
: 因为我觉得学材料有关或者搞材料有关的人应该很多吧。。。。
: 难道没有人申请啊?
: 支持的人来顶一个撒!!!

avatar
F*n
11
That's a convention in Java and should be regarded as part of the
specification. You need to respect it no matter what because there is always
a chance other programs will assume it.

【在 S**********C 的大作中提到】
: Thanks, beside HashMap/Collection, is there any other circumstances that
: we need to override equals() and hashCode()?
: For example, any objectsng that need to searilze?
: like web service or hibernate mapping class? If yes,what will happen
: if the hashCode doesn't return the consistent value?

avatar
o*e
12
在这个问题上,需要做进一步的调查和了解
多参考不同方面的意见

【在 F**********9 的大作中提到】
: re
avatar
b*y
13
这么说把,不遵守这个convention的object是次品

always

【在 F****n 的大作中提到】
: That's a convention in Java and should be regarded as part of the
: specification. You need to respect it no matter what because there is always
: a chance other programs will assume it.

avatar
F*9
14
支持开一个版有什么大不了的。不知道有何不同方面的意见。

【在 o**e 的大作中提到】
: 在这个问题上,需要做进一步的调查和了解
: 多参考不同方面的意见

avatar
f*n
15
次品 is even worse than 废品,because you never know when it will have
problem, making it a nightmare to debug.
Following the convention is very important in enterprise programming, a lot
of times a smart idea is a bad solution.
avatar
o*e
16
支持,材料科学很热
小分子材料,高分子材料,植入医用材料
都很有探讨的空间
支持开版

支持开一个版有什么大不了的。不知道有何不同方面的意见。

【在 F**********9 的大作中提到】
: 支持开一个版有什么大不了的。不知道有何不同方面的意见。
avatar
S*C
17
我知道这个是个Convention,最好要Follow,这么说吧,这
是一个面试的时候别人问到的题目,我答得跟你们说的都差不多,
但好像面试的人仍然要追问,如果不这么做,会发生什么,
我回头看了你回答的第1)个,如果不Override,不应该就用
Object defatult的hashCode() 吗?
我查了一下源代码,equals() default implementation是 return this == obj,
也就是比较两个obj在内存里面是否指向同一个reference,但
hashCode() default implementation是一个native function,不知道
里面是怎么实现的,default会返回什么数值,是否也是
一个常数,那就变成问题2)? 还有对于会造成mess up,面试
的会追问怎么个mess up法,是容许duplicate了呢,还是put了
之后想get的时候返回不同值?那如果不放在HashMap里呢,比如
一个Seariable的Object,是否有同样的问题?
我觉得搞清楚这点还是有点意义的,决不是"Just a convention,
follow it"这么简单。也不完全是回字的4种写法这么无聊。

always

【在 F****n 的大作中提到】
: That's a convention in Java and should be regarded as part of the
: specification. You need to respect it no matter what because there is always
: a chance other programs will assume it.

avatar
b*r
18
support!
btw,哪位有志之士到board版面模板发文吧,偶们来支持!

【在 l****u 的大作中提到】
: 非常不解,
: 因为我觉得学材料有关或者搞材料有关的人应该很多吧。。。。
: 难道没有人申请啊?
: 支持的人来顶一个撒!!!

avatar
g*g
19
It will mess up hashmap, that's what the interviewer wanted to hear.
The piece of code I wrote in the earlier post demos that.
Serialization/deserialization has more to do with serialVersionUID.
and Serializable interface if it's implemented
I don't think hashCode is related.

【在 S**********C 的大作中提到】
: 我知道这个是个Convention,最好要Follow,这么说吧,这
: 是一个面试的时候别人问到的题目,我答得跟你们说的都差不多,
: 但好像面试的人仍然要追问,如果不这么做,会发生什么,
: 我回头看了你回答的第1)个,如果不Override,不应该就用
: Object defatult的hashCode() 吗?
: 我查了一下源代码,equals() default implementation是 return this == obj,
: 也就是比较两个obj在内存里面是否指向同一个reference,但
: hashCode() default implementation是一个native function,不知道
: 里面是怎么实现的,default会返回什么数值,是否也是
: 一个常数,那就变成问题2)? 还有对于会造成mess up,面试

avatar
C*r
20
。。。这个很多年了。。。感觉工程版已经成为了mse和ie的家
avatar
v*s
21
i screwed up this interview question...
the guy asked me, what kind of harm will u get if override a hashcode()
function,
i though it was related to gc.... he mumbled a bit%&*&(*&(*# and we moved to
next question....

【在 g*****g 的大作中提到】
: It will mess up hashmap, that's what the interviewer wanted to hear.
: The piece of code I wrote in the earlier post demos that.
: Serialization/deserialization has more to do with serialVersionUID.
: and Serializable interface if it's implemented
: I don't think hashCode is related.

avatar
F*n
22
You cannot enumerate all cases and should not try to do so, because how can
you be sure about other programs' implementation? What you do is to
understand the mechanism and use your brain to think about each case.
And I think I told you as long as equals() return this == obj, you can
return any constants as hashCode(). It will only drop the performance.

【在 S**********C 的大作中提到】
: 我知道这个是个Convention,最好要Follow,这么说吧,这
: 是一个面试的时候别人问到的题目,我答得跟你们说的都差不多,
: 但好像面试的人仍然要追问,如果不这么做,会发生什么,
: 我回头看了你回答的第1)个,如果不Override,不应该就用
: Object defatult的hashCode() 吗?
: 我查了一下源代码,equals() default implementation是 return this == obj,
: 也就是比较两个obj在内存里面是否指向同一个reference,但
: hashCode() default implementation是一个native function,不知道
: 里面是怎么实现的,default会返回什么数值,是否也是
: 一个常数,那就变成问题2)? 还有对于会造成mess up,面试

avatar
f*n
23
Let me guess what the interviewer want to know one by one:
1) It's java convention that if you override equals method, you should also
override hashcode method. In real situation, it is always true. Otherwise
you don't override either.
2) I think the default hash function should give memory address instead of
constant, because it is much more efficient. So default equals and hashcode
compare the same thing.
3) Constant returned hashcode method is OK (compliable), but actually not a good choice. You are not using hashing function any more.
4) You mess up big (can lose your job as a java developer) if you have a
hashcode method returns different values on objects that equals. As showed
by goodbug's example.
5) Duplicate is fine for hash function, as long as not too much duplication
like constants.
6)You can read String class source code to see how its hashcode method is implemented as an
example. A hashcode method should only use the object fields that are used by its
equals method.
7)What will happen if hashmap object is serialized? Hashcode method can
return different values before and after serialization. However the whole
hash table is reconstructed after serialization, so serialization won't mess
up a hashmap object.

【在 S**********C 的大作中提到】
: 我知道这个是个Convention,最好要Follow,这么说吧,这
: 是一个面试的时候别人问到的题目,我答得跟你们说的都差不多,
: 但好像面试的人仍然要追问,如果不这么做,会发生什么,
: 我回头看了你回答的第1)个,如果不Override,不应该就用
: Object defatult的hashCode() 吗?
: 我查了一下源代码,equals() default implementation是 return this == obj,
: 也就是比较两个obj在内存里面是否指向同一个reference,但
: hashCode() default implementation是一个native function,不知道
: 里面是怎么实现的,default会返回什么数值,是否也是
: 一个常数,那就变成问题2)? 还有对于会造成mess up,面试

avatar
x*p
24
Suppose a and b are two objects, Java uses the following condition to
check whether a and b are duplicated objects.
a.hashCode()==b.hashCode() && a==b || a.equals(b)

【在 S**********C 的大作中提到】
: 书上说,一般Override equals()的时候要同时Override hashCode()
: 那么,如果我
: 1)不Override hashCode()
: 2)Override hashCode(),但返回一个常数,比如10
: 3)Override hashCode(),但随机产生一个数,而不是根据
: 一般的根据Object里面的Fields(e.g Employee(employeeId,name)来定
: 以上三种情况,后果分别是什么?Java是如何判断两个
: Object是否"相等",只要equals() return true,还是同时要
: hashCode()返回相同的值?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。