首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java可变对象作为映射键,但使用默认的hashCode()

Java可变对象作为映射键,但使用默认的hashCode()
EN

Stack Overflow用户
提问于 2014-03-18 15:18:14
回答 2查看 664关注 0票数 1

我理解使用不可变对象作为映射键更好。但是,使用默认的hashCode()方法(当然,我不覆盖equals()方法)的可变对象如何?这也应该可以,因为默认的hashCode()使用对象内存地址?

我有什么好怀念的吗?

EN

回答 2

Stack Overflow用户

发布于 2014-03-18 15:57:18

下面是带有字符串的散列代码。但是,需要担心的一个问题是,在早期/晚期版本的Java字符串哈希代码之间可能会发生实现更改。

代码语言:javascript
复制
public int hashCode()
{
    return "name".hashCode();
} 

此外,还有一篇文章哈希碰撞概率

票数 0
EN

Stack Overflow用户

发布于 2019-11-01 19:06:44

Mutuable对象作为一个键使用默认的equals()和hashcode()是没有用的。

e.g

Map.put(新对象(),“值”);

当你想得到那个价值的时候,

Map.get(新对象());//这将始终返回null

因为使用新对象(),将生成新的哈希码,并且它不会指向保存值的预期桶号,如果最终桶号相同,它将无法匹配哈希码,甚至等于,因此它总是返回NULL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22483589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档