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

为什么hashmap的key不使用对象而是使用字符串

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

为什么hashmap的key不使用对象而是使用字符串

hash算法(散列算法):根据元素的hashCode值确定元素的存储位置,从而快速定位元素。由于元素的hashCode值一般不会连续,所以元素的存储位置一般也不会连续,即随机存储。

而HashMap的内部实现是通过key的hashCode来确定value的存储位置,key相同,value也应该相同。

首先String是不可变的,并且重写了hashCode(),所以即使两个字符串对象的引用不同,但只要值相同,它们的hashCode就相同,即可以得到相同的value。同时每当创建一个字符串对象的时候,它的hashCode就会被缓存下来,所以在HashMap中存储时避免了重新计算hashCode。

在《Java 编程思想》中有这么一句话:设计 hashCode() 时最重要的因素就是对同一个对象调用 hashCode() 都应该产生相同的值。String 类型的对象对这个条件有着很好的支持,因为 String 对象的 hashCode() 值是根据 String 对象的内容计算的,并不是根据对象的地址计算。

如果使用没有重写hashCode()的对象作为key,只要两个对象的引用不同,它们的hashCode就不同,所以想要检索出相同的value,就必须使用该value存储时使用的key对象。所以非 String 类型的数据类型在判断 key 相同时所需要的条件太过苛刻。

如果你想把自定义的对象作为 key,只需要重写 hashCode() 方法与 equals() 方法即可,但依然无法像使用String作为key时对字符串对象的hashCode进行一个缓存。

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

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

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