• 帮助
    • 博客
    • 相册
    • 网盘
    • 超市
    • Xer吧
  • 登录
  • 注册
【公告】2008北京奥运会盘点---X5dj半月刊2008年第16期上线    【活动】“我的奥运我的家”――第二届X5dj模板DIY大赛,参与就有惊喜!    【公告】一边DIY,一边赚积分!--模板DIY共享功能上线!    【公告】新增用户操作记录展示功能,帮助您更好的与朋友们互动    【公告】X5dj新功能汇总贴:新增“密码目录”功能上线    【公告】X5dj.com相册/网盘上传工具发布    
  • ironlong的心情驿站
  • http://www.x5dj.com/ironlong 复制地址
  • 首页

  • 博客

  • 相册

  • 网盘

  • 人际关系网

loading...
重写自己的hashcode()方法 < 上一篇 下一篇 > java写文件时乱码解决
Hibernate里为什么要重写hashcode()和equals()这两个方法?
ironlong 发表于: 2008-03-25 19:26 来源:转载  X度:0  浏览:(296)  评论:(0)
收藏 | 复制地址 | [举报此文章] |  大 中 小 |  引用 删除 修改
ZJ 21:00:06
对了 老师,为什么在HIBERNA里要重写HASCODE 和EQUALS这两个方法? 
付老实 21:04:22
equals用来按照自己的规则判断两个对象是否相等,而重写了equals后,按照java的惯例,就需要重写hashCode 
ZJ 21:05:11
老师 只看懂的一点点呀,再稍微说多点啊! 
付老实 21:08:04
这么说罢 
付老实 21:08:23
1,重点是equals,重写hashCode只是技术要求(为了提高效率) 
付老实 21:09:02
2,为什么要重写equals呢,因为在java的集合框架中,是通过equals来判断两个对象是否相等的 
付老实 21:10:03
3,在hibernate中,经常使用set集合来保存相关对象,而set集合是不允许重复的,但是下面的程序,你判断一下运行结果 
付老实 21:10:44
Set user = new HashSet();
user.add(new Book("精通struts"));
user.add(new Book("精通struts"));
System.out.println(user.size()); 
Neo 21:10:48
这两个为什么相同阿???
就是说set集合是按照equals来判断是否重复的? 
付老实 21:12:00
恩,猜一下打印的结果 
ZJ 21:11:31
应该输出1吧,或许报错 呵呵 
付老实 21:12:44
错了 
付老实 21:12:58
完全取决于Book类有没有重写equals方法 
付老实 21:13:39
如果没有重写,默认equals是比较地址,那么这两个book对象不一样,输出2,意味着hibernate会认为这是两个对象,再接下来的持久化过程中可能会出错 
付老实 21:14:07
如果重写了equals,比如按照主键(书名)比较,那么这两个对象是一样的,输出1 
付老实 21:14:10
明白了? 
ZJ 21:13:26
明白了 
付老实 21:14:32
再说hashCode 
ZJ 21:13:51
恩 
付老实 21:14:57
equals方法虽好,但是效率相对底下  
ZJ 21:14:43
老实接着说说  
付老实 21:15:45
典型的equals实现
public boolean equals(Object obj) {
    Book b = (Book)obj;
    return this.name.equals(b.name);
} 
付老实 21:16:43
其间需要向下转型,调用其他类的equals等操作,有可能比较费时,特别是比较规则比较复杂的时候 
ZJ 21:16:33
恩 能理解 
付老实 21:18:04
而hashCode为每一个对象生成一个散列码(通过一种神秘的算法,一般为关键属性乘以一个质数),避免了比较慢的运算 
付老实 21:18:27
但是hashCode并不能保证能为每一个不同的对象生成唯一的散列码 
ZJ 21:18:34
那若是散列码重复了呢? 
付老实 21:19:59
所以在java的集合中,判断两个对象是否相等的规则是:
1,判断两个对象的hashCode是否相等
   如果不相等,认为两个对象也不相等,完毕
   如果相等,转入2
2,判断两个对象用equals运算是否相等
   如果不相等,认为两个对象也不相等
   如果相等,认为两个对象相等
完毕
 
Neo 21:19:52
String好像是一个特例阿。。。 
付老实 21:20:59
由此可以看出,一个好的散列码算法可以加快程序的速度,apache专门有个工具可以为类生成hashCode,MyEclipse 5.0中也有一个工具 
付老实 21:21:09
String没有什么特殊的,也是这个原则 
Neo 21:21:39
那"123","123"这两个字符串为什么相等? 
付老实 21:23:00
晕,你说呢 
Neo 21:22:07
 。。。 
Neo 21:22:10
想起来了 
Neo 21:22:19
池是把? 
付老实 21:23:20
嗯 
Neo 21:22:36
云,忘了~ 
付老实 21:23:49
好了,下去再去看看《深入浅出Hibernate》的210页吧 
ZJ 21:23:11
恩 一会回去就好好看! 
付老实 21:25:28
又可以更新博客了 
文章引用自:
 
系统分类:科技·IT
标签:科技   IT   
推送: 无分类 归类:综合

热爱篮球...热爱摇滚...
 
重写自己的hashcode()方法 < 上一篇 下一篇 > java写文件时乱码解决
用户回复
首页 上一页 1 下一页 尾页 共 1 页
评分与快速回复
博主推荐
  • · 30极品美女!作为礼物送给大家!
相关文章
  • ·日志边框素材
  • ·请找出正方形内各数字之间的逻辑关系,然后从A~F六个选项中选择一个填入空白处,以完成这个正方形
  • ·求教几个mensa试题
  • ·深圳做网站菜鸟挣千元(转)
  • ·无忧在线安全机制介绍
  • ·无忧在线系统构架介绍
  • ·无忧在线应用领域介绍
  • ·无忧在线2.0来啦! WuYouOnline2.0版本全面上市!
  • ·揭秘8种动物超能力
  • ·查看同一ip下的所有网站
  • ·浅谈国内PCB抄板行业将会快速增长的原因
  • ·CCTV4
  • ·深圳建网站的经历-感觉很累
  • ·储罐网:http://www.cnchuguan.com
  • ·为什么F1是最SUPER的体育运动?
  • ·it技术s
  • ·it技术
博友热推
  • 新功能:“模板DIY共享”上线
  • 我的奥运我的家X5dj模板DIY大赛
  • 当你吃到几个虫子的时候最可怕?
  • 现在的小孩心里承受能力太脆弱了
  • 医头必需先医脚,这就是俺的理论
  • 每个家庭都会遇到赡养老人的问题
  • 我现在老了,足以证明我不是妖怪
  • 人性,在很多时候实在是不太美好
  • 国奥开房球员坚称自己只是洗个澡
  • 80后的告别,隆重而悲情的青春祭
关于我们 | X5dj动态 | 加入我们 | 友情链接 | 官方日志 | 免责声明 | 举报不良信息
北京开创明天科技有限公司 版权所有 京ICP证040979号