HIBERNA里要重写HASCODE 和EQUALS这两个方法

原创 2007年09月27日 10:49:00

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运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等

从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

从一道面试题彻底搞懂hashCode与equals的作用与区别
  • lijiecao0226
  • lijiecao0226
  • 2014年04月28日 14:24
  • 8390

对于equal和hashcode的理解,何时需要重写

重写equal 的同时为什么必须重写hashcode? hashCode是编译器为不同对象产生的不同整数,根据equal方法的定义:如果两个对象是相等(equal)的,那么两个对象调用hashC...
  • qq352773277
  • qq352773277
  • 2014年12月02日 10:34
  • 2210

如何重写hashCode()和equals()方法

hashCode()和equals()方法可以说是Java完全面向对象的一大特色.它为我们的编程提供便利的同时也带来了很多危险.这篇文章我们就讨论一下如何正解理解和使用这2个方法. 如何重写equ...
  • tracker_w
  • tracker_w
  • 2013年12月02日 12:57
  • 19013

Hibernate中为什么要重写equals()和hashCode()这两个方法

Hibernate中为什么要重写equals()和hashCode()这两个方法
  • yuripe1995
  • yuripe1995
  • 2015年10月17日 17:34
  • 302

effective_java之一:覆写 equals 和 hasCode 方法

提升下自己的表达及总结能力,也许若干年后可以去做一名合格的讲师~~~ 一、覆写equals方法 为什么要覆写equals方法呢?覆写的原则是什么呢?原因以下: 有时候做到 两个实例对象在 逻辑上是否相...
  • klov001
  • klov001
  • 2013年11月16日 14:39
  • 934

联合主键实现Serializable接口,同时重写equals和hasCode方法 的原因和步骤

关于联合主键 联合主键为什么要重写equals方法和hashCode方法,是为了保证唯一性 1、在数据库保证唯一性是使用的联合主键 2、把一系列的对象放到内存的时候,为了区分同名对象,数据库是使...
  • qq_26975307
  • qq_26975307
  • 2016年12月11日 10:59
  • 501

细说equals()方法和hascode()方法

一、前言 对于这两个方法的研究,源于一道比较经典的面试题:“x.equals(y)==true;x,y可有不同的hashcode对吗?”,其实这道题的关键在于考我们对equals()方法和hash...
  • liuxinyang666
  • liuxinyang666
  • 2017年12月03日 20:50
  • 147

java equals与hashCode 两个重要方法的重写

比较两个String 的类内容是否相同时,使用了equals方法。其实,equals方法都是来自Object类,String 类对其进行了重写以满足字符串内容的要求。Object 类中设计这个方法就是...
  • ailands
  • ailands
  • 2012年01月11日 14:06
  • 461

一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)

题目中包括三个小的问题,由简单到复杂: 1,如果只有一个出现一次,考察到异或的性质,就是如果同一个数字和自己异或的活结果为零,那么循环遍历一遍数组,将数组中的元素全部做异或运算,那么出现两次的数字全...
  • immiao
  • immiao
  • 2013年12月29日 12:51
  • 722

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n) ,空间复杂度是O(1) 。分析:这是一道很新颖的关于位运算的面试题。首先我们...
  • erazy0
  • erazy0
  • 2011年05月24日 17:56
  • 1902
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HIBERNA里要重写HASCODE 和EQUALS这两个方法
举报原因:
原因补充:

(最多只允许输入30个字)