在 Java 中使用列表时覆盖 equals()
Overriding equals() when using Lists in Java
我有点困惑。假设我有 class A 和一些 List<A>
在其他一些 class B.
因此,因为我使用的是 列表,所以允许重复。因为允许重复(这意味着不需要比较),我是否必须覆盖方法 equals() 和 hashCode() in class一个?
所以这里强调的是列表(允许重复-不需要比较)。
我应该在使用 Set 时覆盖这两个方法(不允许重复 - 我们需要定义如何比较对象)? (99% 确定这是正确的答案,只是想检查一下并确保我得到 100% 正确的答案:List 和 Set)
注意:我没有在堆栈中找到答案,因为没有人问过与使用列表和允许重复项完全相同的问题。
如果您不打算将任何 A
对象相互比较 - 这意味着您既没有使用 Set
,也没有使用 List
方法,例如 indexOf
或 contains
-- 那么你不需要实现 equals
或 hashCode
.
但是,如果您确实打算使用 indexOf
或 contains
—— 或者如果您打算 测试 您的代码,例如通过断言 List
中的 A
等于某些预期的 A
- 那么您确实需要实施 equals
,并且实施 [=15] 是不好的做法=] 而没有实施 hashCode
。您不需要 good hashCode
的实现,但您应该有一个。
我有点困惑。假设我有 class A 和一些 List<A>
在其他一些 class B.
因此,因为我使用的是 列表,所以允许重复。因为允许重复(这意味着不需要比较),我是否必须覆盖方法 equals() 和 hashCode() in class一个?
所以这里强调的是列表(允许重复-不需要比较)。
我应该在使用 Set 时覆盖这两个方法(不允许重复 - 我们需要定义如何比较对象)? (99% 确定这是正确的答案,只是想检查一下并确保我得到 100% 正确的答案:List 和 Set)
注意:我没有在堆栈中找到答案,因为没有人问过与使用列表和允许重复项完全相同的问题。
如果您不打算将任何 A
对象相互比较 - 这意味着您既没有使用 Set
,也没有使用 List
方法,例如 indexOf
或 contains
-- 那么你不需要实现 equals
或 hashCode
.
但是,如果您确实打算使用 indexOf
或 contains
—— 或者如果您打算 测试 您的代码,例如通过断言 List
中的 A
等于某些预期的 A
- 那么您确实需要实施 equals
,并且实施 [=15] 是不好的做法=] 而没有实施 hashCode
。您不需要 good hashCode
的实现,但您应该有一个。