最近在自学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
但是由于上面如果不乘个东西很可能得到不同的东西+起来却是同一个值
比如你看 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?