小鸟求助~~希望大家帮忙~

cedared 2009-07-15 11:29:29
最近在自学JAVA看的是COREJAVA 然后讲到hashcode的时候有疑问了~书里给了这样一段代码:
public int hashCod()
{
return 7*name.hashCode()+11*new Double(salary).hashCode+13*hireDay.hashCode();
}

只是不明白7、11、13是怎么来的 书上也没有说 所以回家来问问大家 希望大家帮忙谢谢~~O(∩_∩)O
...全文
31 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edwin603 2009-07-15
  • 打赏
  • 举报
回复
印象不深了 不知道我的解释可以不 你想想楼主hashcode 最好是唯一的对不
但是由于上面如果不乘个东西很可能得到不同的东西+起来却是同一个值
比如你看 2+3+4=9 1+1+7=9
如果 7*1+11*3+13*4 还等于 7*1+11*1+13*7吗?
所以其实前面的数字 不是固定的只是为了让得到的结果 相等的几率变小 尽量保持唯一 当然就算唯一其实也没什么
后面用equals 在判定下 这是我的理解 印象不深了 希望启发下楼主```
Edwin603 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nzz1985 的回复:]
更正下楼上的,散列表比较对象时hashcode是用来获取对象的,不会用来比较的,只有equals才是用来比较的
像13,7,31这样的数只是用来降低产生同义词的几率,尽量保证hashcode的唯一性
[/Quote]
不会用来比较的? 别一棒子打死 你这话绝对不对
我是记不清是哪个方法了 有个方法 在用时 必须 要自己定义好hashcode和equals 原因就是提高比较的效率
先用 hashcode 来比较,当然我的比较是说 是不是同一个元素 也许你认为比较就是 比较大小
ok?
nzz1985 2009-07-15
  • 打赏
  • 举报
回复
更正下楼上的,散列表比较对象时hashcode是用来获取对象的,不会用来比较的,只有equals才是用来比较的
像13,7,31这样的数只是用来降低产生同义词的几率,尽量保证hashcode的唯一性
Edwin603 2009-07-15
  • 打赏
  • 举报
回复
刚才又想了下 我在1楼的解释应该是对的 你想想 你那个肯定是重写了hashcode的方法
为的是 在比较对象是不是同一个 那个代码应该是这个意思,一般是先比较hashcode 在比较重写的equals方法
先比较hashcode 这样效率高些 所以自己的代码应该尽量使得每个对象的hashcode 保持唯一 所以才在每个成员变量前
加了数字 其实这个数字是可以自己改变的 但是目的是为了让 最后的hashcode 在不同的对象上表示不同的值
加了数字就会提高唯一的几率 当然加个 13 啊 7啊 或者29啊 非常好 千万别加 1 2 10 这样的数 !
印象中 你看的那本书后 应该有解释这个数字的原因 我也记不清楚了 楼主再仔细看看书后面是否有讲解!
angel6709 2009-07-15
  • 打赏
  • 举报
回复
i dont know
cwjieNo1 2009-07-15
  • 打赏
  • 举报
回复
hashCode相当于数字签名样的,前面这些数字是散列吗,通过哈希算法算出来的一大窜数字之类的东西和内存有关。所以每次这些数字都不一样的

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧