为控制流实现 equals() 好吗?

Is it good to implement equals() for control flow?

假设我有一个 class Item,它有很多字段,其中之一是 color.
我还有另一个 class Holder 存储 Item.
的实例 每个 Holder 可以有任意数量的 Item 实例,只要每个 Color 实例不超过一个。

如果两个项目的颜色相同,以 return 为真的方式实施 equals() 以在 Holder 中使用 Set 项目是否有意义?或者我应该只在所有字段都相等时才使 equals return 为真并使用另一个逻辑来实现 Holder 逻辑?

  1. 最好为 class 的 equals 和 hashCode 方法创建覆盖。
  2. 主要考虑因素应该是什么真正使 class 的实例独一无二,什么 定义了 指定了 它。
  3. 如果颜色 属性 很好且完全定义了它,那就这样吧(尽管这至少在第一眼看来不太可能)。
  4. 如果不是,那么最好不要使用颜色字段作为确定唯一性的唯一字段,因为您不知道如何使用class 将来。

不,equals() 应该比较整个对象,或者应该比较 natural 唯一值,例如一个 ID 或一些项目代码。

颜色不是项目的自然唯一标识符,所以不要实现 equals() 来比较它。

相反,使用 TreeSet 和比较 color.

的自定义 Comparator

或者,使用由 color 键控的 Map