首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java中hashCode与equals方法的关系

Java中hashCode与equals方法的关系
EN

Stack Overflow用户
提问于 2013-06-10 23:44:29
回答 3查看 170.4K关注 0票数 115

我在很多地方读到,在Java语言中覆盖equals方法的同时,也应该覆盖hashCode方法,否则就是“违反合同”。

但是到目前为止,如果我只覆盖equals方法,而不覆盖hashCode方法,我还没有遇到任何问题。

合同是什么?当我违反合同时,为什么我不会面临任何问题?在哪种情况下,如果我没有覆盖hashCode方法,我将面临一个问题?

EN

回答 3

Stack Overflow用户

发布于 2013-06-10 23:48:45

约定是,如果使用obj1.equals(obj2),则使用obj1.hashCode() == obj2.hashCode(),这主要是出于性能原因,因为映射主要使用hashCode方法来比较条目键。

票数 7
EN

Stack Overflow用户

发布于 2013-06-10 23:49:25

看看HashtablesHashmapsHashSets等等。它们都将散列密钥存储为它们的密钥。当调用get(Object key)时,将生成参数的散列并在给定的散列中查找。

如果没有覆盖hashCode(),并且键的实例已更改(例如,一个根本不重要的简单字符串),则hashCode()可能会导致同一对象有两个不同的哈希码,从而导致在map.get()中找不到给定的键。

票数 7
EN

Stack Overflow用户

发布于 2013-06-10 23:46:26

约定是:如果两个对象相等,则它们应该具有相同的散列码,如果两个对象不相等,则它们可能具有或不具有相同的散列码。

尝试在HashMap中使用你的对象作为键(在joachim-sauer的评论之后编辑),你会开始面临麻烦。合同是一个指导方针,而不是强加给你的东西。

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

https://stackoverflow.com/questions/17027777

复制
相关文章

相似问题

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