黑马程序员技术交流社区
标题:
为什么在重写equals()方法时,一般都会重写hashCode()方法?
[打印本页]
作者:
zippo
时间:
2014-7-27 23:43
标题:
为什么在重写equals()方法时,一般都会重写hashCode()方法?
本帖最后由 zippo 于 2014-8-2 22:41 编辑
一直都搞不懂这个问题,求解释。
作者:
'龍.
时间:
2014-7-27 23:48
hashCode是判断内存地址值是否为同一个..
作者:
蔡爽
时间:
2014-7-28 09:39
一般来说,如果你要把一个类的对象放入容器中,那么通常要为其重写equals()方法,让他们比较地址值而不是内容值。特别地,如果要把你的类的对象放入散列中,那么还要重写hashCode()方法;要放到有序容器中,还要重写compareTo()方法。
equals()相等的两个对象,hashcode()一定相等;
equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。(我的理解是由于哈希码在生成的时候产生冲突造成的)。
反过来:hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等
我的理解哈,
作者:
a6511631
时间:
2014-7-28 09:48
看你是什么集合对象,list集合对象就不用写hashCode()啊
作者:
a6511631
时间:
2014-7-28 09:57
使用集合的技巧: 看到Array就是数组结构,有角标,查询速度很快。 看到link就是链表结构:增删速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast(); 看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到该结构的中的元素必须覆盖hashCode,equals方法。 看到tree就是二叉树,就要想到排序,就想要用到比较。 比较的两种方式: 一个是Comparable:覆盖compareTo方法; 一个是Comparator:覆盖compare方法。 LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有存入顺序和取出顺序一致,保证哈希表有序。 集合什么时候用? 当存储的是一个元素时,就用Collection。当存储对象之间存在着映射关系时,就使用Map集合。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2