2

我正在查看java.lang.Object并阅读 StackOverflow 中关于同一主题的几个问题。

equals()方法用于确定两个对象的相等性。

基本上,如果您愿意,store an object in a collection (Map, Set, List)则必须根据文档中定义的合同实现 equals 和 hashCode 方法。

如果我错了,请纠正我,如果我没有将我的类存储在集合中,那么我不需要重写该hashcode方法,因为该equals方法已经足够了。

4

5 回答 5

6

这是对的。但是,如果您稍后(当快捷方式被遗忘时)将其放入 Map 或 Set 中,事情将严重崩溃。

于 2013-09-21T15:55:18.853 回答
2

hashCode如果您要覆盖,建议覆盖,equals但这不是强制性的。支持这种方法是为了有利于哈希表,例如HashMap.

注意:因此,如果您确定您或其他任何人永远不会使用您的类对象存储在散列集合中,请跳过它。否则覆盖它。

于 2013-09-21T16:02:01.990 回答
1

如果您不将您的对象放入 HashMap 或类似的 Collection / Map 类型中,那么您不要在您的类中覆盖 hashCode 函数。

于 2013-09-21T15:55:26.693 回答
0

来自Object#equalsjavadoc:

请注意,每当重写此方法时,通常都需要重写该hashCode方法,以维护该hashCode方法的一般合同,该合同规定相等的对象必须具有相等的哈希码。

这意味着,如果您将 override equals,那么最好也 overridehashCode以遵循此合同,但这不是必需的。

于 2013-09-21T15:55:11.400 回答
0

覆盖hashCode()将有助于对Java中所有基于哈希的实现进行健康分类。桶将根据 hashCode() 方法的值进行分配。

于 2013-09-21T15:55:19.647 回答