栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

为何HashMap的键是自定义对象一定要重写equals()和hashcode()方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为何HashMap的键是自定义对象一定要重写equals()和hashcode()方法

首先,我们在进行编程时,会用到HashMap,HashMap我们知道,底层原理实际上是数组加链表,而我们在赋予键值对时,如果键是String类似的东西,是没有问题的,因为String默认重写了equals()和hashcode方法,但当我们将自定义的对象作为键,如果不重写这两个方法是会出大问题的。

因为不重写系统默认是调用object,返回的是对象的内存地址,结果肯定是false,即使内容是相同的Set也不会去重,当put(key,value)时,会根据哈希算法找到自己的位置,但是当进行完哈希算法返回的是同一个值,这时会在返回值的下面增加一个链表节点(我们称为hash冲突),当遍历HashMap时,我们说即使哈希值完全相同,但对象的内容也不一定相同,这时就要重写equals()方法,因为equals()方法也是返回内存地址的(不重写会默认调用系统的equals()方法,两个对象的内存地址必不相同,返回值依然是false,Set不会去重),读者可查看equals源码。

hasgcode()方法主要是要来定位元素在数组中的下标位置

equals()方法主要是在发生hash冲突时,遍历链表,挨个比较元素,判断元素是否相等

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号