为什么重写equals还要重写hashcode?

HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的。HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等的。若equals()不相等则认为他们不相等。如果只重写hashcode()不重写equals()方法,当比较equals()时只是看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写。HashMap用来判断key是否相等的方法,其实是调用了HashSet判断加入元素 是否相等。重载hashCode()是为了对同一个key,能得到相同的Hash Code,这样HashMap就可以定位到我们指定的key上。重载equals()是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样我们才真正地获得了这个key所对应的这个键值对。

为什么重写equals还要重写hashcode?-上流阁

*文章为作者独立观点,不代表上流阁立场
本文由 江风成 授权 上流阁 发表,并经上流阁编辑。转载此文章须经作者同意,并请附上出处(上流阁)及本页链接。原文链接https://www.o6c.com/java/2019/11/08/1211.html
发表评论

1 条评论
相关文章
JS、PHP、JAVA正则表达式屏蔽关键字的方法
JS、PHP、JAVA正则表达式屏蔽关键字的方法
java中map的分类和常见的情况
java中map的分类和常见的情况
Lamda表达式的优缺点
Lamda表达式的优缺点
Linux CentOS 7.2版mysql 备份命令
Linux CentOS 7.2版mysql 备份命令
Linux CentOS 7.2版 配置定时任务
Linux CentOS 7.2版 配置定时任务
Linux CentOS 7.2版 JDK 安装
Linux CentOS 7.2版 JDK 安装
javaweb开发程序员php开发,微信开发。接受定制开发

最新评论