为什么我们在 HashMap 和 HashSet 中使用 equals() 方法而不实现比较器接口?

Mad*_*thi -4 java collections

为什么我们在 HashMap 和 HashSet 中使用 equals() 方法而不实现比较器接口?我在上面的概念中看到了一些示例程序。但是没有比较器接口,他们使用 equals() 和 hashcode() 方法。我的问题是,我们可以在没有比较器接口的情况下使用这些方法吗?我们还可以使用具有可比接口的 equals() 和 hashcode() 以及 compareTo() 方法吗?

Jon*_*eet 5

HashMap并且HashSet关心比较键或元素是否相等——他们不关心ordering,不像(比如TreeMapTreeSet)。这就是他们使用equals()和的原因hashCode()

比较器都是关于排序的 - 完全有可能有一个没有特定order 的类,但确实有相等的概念。例如,一个 2DPoint类型没有特别自然的排序(如果你想为它定义比较器,你可以做 Y-then-X 或 X-then-Y)但确实有一个自然的相等运算。这意味着可以成为 a 中的键HashMap或a 中的元素HashSet