最近在自学JAVA看的是COREJAVA 然后讲到hashcode的时候有疑问了~书里给了这样一段代码:
public int hashCod()
{
return 7*name.hashCode()+11*new Double(salary).hashCode+13*hireDay.hashCode();
}只是不明白7、11、13是怎么来的 书上也没有说 所以回家来问问大家 希望大家帮忙谢谢~~O(∩_∩)O
public int hashCod()
{
return 7*name.hashCode()+11*new Double(salary).hashCode+13*hireDay.hashCode();
}只是不明白7、11、13是怎么来的 书上也没有说 所以回家来问问大家 希望大家帮忙谢谢~~O(∩_∩)O
解决方案 »
- 大牛们 提一个thinking in java 中有关异常捕获的问题
- ucs2转码问题
- 小妹在线等待使用CVS工具?
- 小弟求救:我用lucene建立了一个全文检索的应用,客户要求在检索的过程中随时终止检索操作。请问,该如何实现?
- 奇怪,为什么 string 用 byte <<= 1 后,再 byte >>= 1,再 new String(b),得到的字符串为什么不是原来的 string ,怎么样才能得回原来
- 如何处理Java分布式
- java 里面有没有类似于dephi中format字符串的函数啊?
- 运行rmi不成功,无奈!大家帮忙。
- 初来乍到,一个小问题,可用分怎么算的?
- java 中如何创建hashmap 的代理对象,或者,怎么观察hashmap的改变的前后状态
- 求教,如何让jcombobox的选中项在EditorComponent显示不同的值
- java1.6是在5.0之前?
但是由于上面如果不乘个东西很可能得到不同的东西+起来却是同一个值
比如你看 2+3+4=9 1+1+7=9
如果 7*1+11*3+13*4 还等于 7*1+11*1+13*7吗?
所以其实前面的数字 不是固定的只是为了让得到的结果 相等的几率变小 尽量保持唯一 当然就算唯一其实也没什么
后面用equals 在判定下 这是我的理解 印象不深了 希望启发下楼主```
为的是 在比较对象是不是同一个 那个代码应该是这个意思,一般是先比较hashcode 在比较重写的equals方法
先比较hashcode 这样效率高些 所以自己的代码应该尽量使得每个对象的hashcode 保持唯一 所以才在每个成员变量前
加了数字 其实这个数字是可以自己改变的 但是目的是为了让 最后的hashcode 在不同的对象上表示不同的值
加了数字就会提高唯一的几率 当然加个 13 啊 7啊 或者29啊 非常好 千万别加 1 2 10 这样的数 !
印象中 你看的那本书后 应该有解释这个数字的原因 我也记不清楚了 楼主再仔细看看书后面是否有讲解!
像13,7,31这样的数只是用来降低产生同义词的几率,尽量保证hashcode的唯一性
我是记不清是哪个方法了 有个方法 在用时 必须 要自己定义好hashcode和equals 原因就是提高比较的效率
先用 hashcode 来比较,当然我的比较是说 是不是同一个元素 也许你认为比较就是 比较大小
ok?