黑马程序员技术交流社区

标题: 集合判断相同对象 [打印本页]

作者: 杨强    时间: 2011-10-28 01:18
标题: 集合判断相同对象
用hashCode()方法
不同的对象会出项相同的hashCode吗  如何避免
作者: 绿影    时间: 2011-10-28 01:35
重写hashcode时可以如下方式:
public int hashCode()
  {   
   final int NUM = 38;//随意搞一个数
   return name.hashCode() + age*NUM;//乘以一个数降低重复
  }


作者: fso918    时间: 2011-10-28 08:44
hashcode从原则上说是必须是一个唯一值,但现实中对象太多,int型数据个数有限,无法给每一个对象都分配一个唯一的hashcode,所以必然有重码出现。
如果两个对象hashcode相同,就要调用equals方法来判断是否是同一个对象。
关键是要理解什么是散列技术。原理清楚了,就知道hashcode是用来干什么的了。
作者: 吉许    时间: 2011-10-28 09:16
你提到不同的对象会产生相同的hashcode吗?主要目的就是为了比较两个对象是不是相等。
equals()相等的两个对象,hashcode()一定相等;
equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。为了降低重复可以向上面说的乘以一个任意数。
hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。

具体我参见了http://www.iteye.com/topic/257191这篇文章,java中hashcode()和equals()的详解,讲的比较透彻。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2