w********s 发帖数: 1570 | 1 1,java中的类什么时候要自己写个hashCode()?
2,写出一个能break HashMap正常工作的hashCode()
3,怎样测试hashCode()是否work? |
l*****a 发帖数: 14598 | 2
用随机数函数生成hashCode
【在 w********s 的大作中提到】 : 1,java中的类什么时候要自己写个hashCode()? : 2,写出一个能break HashMap正常工作的hashCode() : 3,怎样测试hashCode()是否work?
|
y***n 发帖数: 1594 | |
w********s 发帖数: 1570 | 4 怎么测试?
【在 y***n 的大作中提到】 : 难道不是都要写吗?
|
m*****l 发帖数: 95 | 5 1.重写了equals的类要求重写hashCode()
2.return 0;
3. 不知道。。。
【在 w********s 的大作中提到】 : 1,java中的类什么时候要自己写个hashCode()? : 2,写出一个能break HashMap正常工作的hashCode() : 3,怎样测试hashCode()是否work?
|
w********s 发帖数: 1570 | 6 return 0真能break HashMap么?
【在 m*****l 的大作中提到】 : 1.重写了equals的类要求重写hashCode() : 2.return 0; : 3. 不知道。。。
|
s********k 发帖数: 2352 | 7 完全不会。。。
【在 w********s 的大作中提到】 : 1,java中的类什么时候要自己写个hashCode()? : 2,写出一个能break HashMap正常工作的hashCode() : 3,怎样测试hashCode()是否work?
|
w********s 发帖数: 1570 | 8 你再仔细想想return 0会不会break HashMap?
【在 m*****l 的大作中提到】 : 1.重写了equals的类要求重写hashCode() : 2.return 0; : 3. 不知道。。。
|
o***g 发帖数: 2784 | 9 补充一下
看第45页:
http://uet.vnu.edu.vn/~chauttm/e-books/java/Effective.Java.2nd.
2. 楼上说的random是可以的。break hashmap的意思应该是像书里的例子,本来
hashmap里有这个object,本来应该找到的,但是由于hashcode的原因找不到了。另外
一个可能是错误的将某个不应该计算hashcode的field给计算hashcode了。比如user类
,可以用username或者id算hashcode,假设id或者username是不能修改的。如果错误的
将user.address也参与了hashcode的计算,那如果user.address修改了,hashcode也会
变了。
3. 测试的话需要测试书里面的前2点。第2点好办,就是测试两个equals的object的
hashcode是否也一样。第1点的话,可以修改一个object里的field,然后看hashcode是
否变化,但是也不能全部修改吧,hashcode总得根据某些个field算出来的。还得根据
业务逻辑,某些不应该算hashcode的field,要确保这些field没有参与hashcode的计算
【在 m*****l 的大作中提到】 : 1.重写了equals的类要求重写hashCode() : 2.return 0; : 3. 不知道。。。
|
m*****l 发帖数: 95 | 10 我对break hashcode的理解有误了,我理解为让这个hashcode()不具有hash降低时间复
杂度的效果就算break了。返回random应该是最好的答案。 |