Java里为什么hascode 和 equals方法 总是成对出现?
来源:互联网 发布:淘宝货源供应商可靠吗 编辑:程序博客网 时间:2024/04/27 17:29
equals如果经过重载会用来比较两个对象是否相同,就需要用到hascode
在set集合中,当插入一条数据的时候,会检查是否有重复的元素,这时就会调用equals方法来比较对象是否相等,如果equals方法没有被覆盖的话,比较得出两个object地址为true,其哈希码值也一定相同。
当你覆盖了equals方法,有可能得到的结果为true,但两个对象的存放的地址有可能不同,导致哈希码值不同,这样的话就可能导致hashset 不能正常运行,为了能保证hashset 能正常工作,所以需要同时覆盖hashcode 方法
修正一下
当要把对象存在某种Hash容器类是且不允许重复例如Hashset,应该是先调用此对象的hashcode()返回此对象的hashcode,然后判断该hashcode是否与容器类其它对象的hashcode重复,如果不重复,则表示该对象不重复("如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果"。[color=#FF6600][/color]这句话就是原因)如果有重复则调用对象的equals()方法来判断该对象是否重复.为什么这里还要调用equals()方法呢?因为下面这句话"如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能"。 [color=#FF6600][/color]
也正是因为这几句话才使得,要同时重写equals()方法和hashcode()方法.因为如果你只重写了equals()方法,有可能造成两个对象相等了而hashcode却不相等.因为此时的用于产生hashcode的hashcode()还是基于以前那个未备重写的equals()方法.
- Java里为什么hascode 和 equals方法 总是成对出现?
- java中equals() 和 hasCode()方法比较
- HIBERNA里要重写HASCODE 和EQUALS这两个方法
- equals()方法和hascode()方法
- 黑马程序员-java笔记之equals和hascode方法总结。
- 黑马程序员-java笔记之equals和hascode方法总结。
- 细说equals()方法和hascode()方法
- 如何重写Java中的equals、hascode方法
- 重写equals和hasCode 方法 JDK1.7
- hascode和equals为什么要同时复写—Java源码中的奥秘
- 2017-08-28-java-为什么要同时重写hasCode和equals
- java:equals与hascode( )
- 转 Java中equals()和hasCode()的方法详解_NightMare(转载)
- 重写对象的equals方法和hascode方法
- 在Boss 里已重写hascode和equals 方法,且b1、b2相同,为啥set还是添加相同元素????
- 联合主键实现Serializable接口,重写equals和hasCode方法
- effective_java之一:覆写 equals 和 hasCode 方法
- Java equals与hasCode详解
- MINIGUI成功移植到MINI2440详解
- 求高手指点
- Sybase跨平台dump/load 操作说明
- 分析MySQL连接字符串的实际操作步骤汇总
- bootloader——options.inc
- Java里为什么hascode 和 equals方法 总是成对出现?
- .net三层怎样创建连接数据库
- 个人总结分享:很好用的PHP数据库类
- Oracle常用SQL语句
- erlang入门
- SELECT WHERE GROUP_BY HAVING ORDER_BY 组合 执行顺序
- javascript中的回调函数中变量作用域
- 如何同时安装sql2000和sql2005数据库
- ajaxAnywhere.getAJAX() 方法的一点心得