首页 > 解决方案 > 为什么需要使用 Set 覆盖 equals() 和 hashcode() 进行多值关联?

问题描述

hibernate 手册中,如果您打算将持久类的实例放在 Set 中(表示多值关联的推荐方法),则必须覆盖 equals() 和 hashCode() 方法。

于是问题出现了:

标签: javahibernate

解决方案


那么,否则如何HashSet推断平等?这是基于hashCode/equals. 对于 aSet您将需要这两种方法,因为List仅使用 equals (例如在类似的方法contains中),但它们都定义了,因此您不会遇到奇怪的惊喜。

一般来说compareTo,如果您也覆盖它是一件好事Comparable- 例如,这在内部用于HasMap当找到平局时。您不必这样做,但如果您打算将这些作为Map.

正如我tie所说,当两个 hashCodes 相等并且 aHashMap决定移动到 a时使用perfectly balanced tree node,请参见这里这个甚至这个


推荐阅读