HIBERNA里要重写HASCODE 和EQUALS这两个方法
2007-09-27 10:49
316 查看
equals用来按照自己的规则判断两个对象是否相等,而重写了equals后,按照java的惯例,就需要重写hashCode
1,重点是equals,重写hashCode只是技术要求(为了提高效率)
2,为什么要重写equals呢,因为在java的集合框架中,是通过equals来判断两个对象是否相等的
3,在hibernate中,经常使用set集合来保存相关对象,而set集合是不允许重复的,但是下面的程序,你判断一下运行结果
Set user = new HashSet();
user.add(new Book("精通struts"));
user.add(new Book("精通struts"));
System.out.println(user.size());
完全取决于Book类有没有重写equals方法 ,如果没有重写,默认equals是比较地址,那么这两个book对象不一样,输出2,意味着hibernate会认为这是两个对象,再接下来的持久化过程中可能会出错 ;如果重写了equals,比如按照主键(书名)比较,那么这两个对象是一样的,输出1
equals方法虽好,但是效率相对底下;而hashCode为每一个对象生成一个散列码(通过一种神秘的算法,一般为关键属性乘以一个质数),避免了比较慢的运算,但是hashCode并不能保证能为每一个不同的对象生成唯一的散列码
所以在java的集合中,判断两个对象是否相等的规则是:
1,判断两个对象的hashCode是否相等
如果不相等,认为两个对象也不相等,完毕
如果相等,转入2
2,判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等
1,重点是equals,重写hashCode只是技术要求(为了提高效率)
2,为什么要重写equals呢,因为在java的集合框架中,是通过equals来判断两个对象是否相等的
3,在hibernate中,经常使用set集合来保存相关对象,而set集合是不允许重复的,但是下面的程序,你判断一下运行结果
Set user = new HashSet();
user.add(new Book("精通struts"));
user.add(new Book("精通struts"));
System.out.println(user.size());
完全取决于Book类有没有重写equals方法 ,如果没有重写,默认equals是比较地址,那么这两个book对象不一样,输出2,意味着hibernate会认为这是两个对象,再接下来的持久化过程中可能会出错 ;如果重写了equals,比如按照主键(书名)比较,那么这两个对象是一样的,输出1
equals方法虽好,但是效率相对底下;而hashCode为每一个对象生成一个散列码(通过一种神秘的算法,一般为关键属性乘以一个质数),避免了比较慢的运算,但是hashCode并不能保证能为每一个不同的对象生成唯一的散列码
所以在java的集合中,判断两个对象是否相等的规则是:
1,判断两个对象的hashCode是否相等
如果不相等,认为两个对象也不相等,完毕
如果相等,转入2
2,判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等
相关文章推荐
- 在Boss 里已重写hascode和equals 方法,且b1、b2相同,为啥set还是添加相同元素????
- 重写equals和hasCode 方法 JDK1.7
- 学习笔记-JAVA-考点10-什么情况下需要重写equals和hashcode()两个方法?
- 比较两个对象的内容是否相等 重写object 的equals方法
- java equals与hashCode 两个重要方法的重写
- 2017-08-28-java-为什么要同时重写hasCode和equals
- List中的Contains方法内部其实是用对象的equals方法做比较,所以如果比较两个类就重写类的equals方法即可
- Hibernate中为什么要重写equals()和hashCode()这两个方法
- 关于object类的两个重要方法以及为什么重写equals一定要重写hashcode()
- Java中equals()和hasCode()的方法详解
- 转 Java中equals()和hasCode()的方法详解_NightMare(转载)
- 判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法
- checkBox多选时,重写hasCode()方法和equal()方法对实体类的增加和移除
- Java里为什么hascode 和 equals方法 总是成对出现?
- 判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法
- 只要覆盖equals()方法,就应该覆盖hasCode()方法
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- 重写equals()方法
- 在对List集合进行remove()等操作重写equals()和hashCode()方法的必要性
- Java 中equal() 方法与==的区别以及 equals()与 hashCode()方法重写