【发布时间】:2021-07-29 04:09:40
【问题描述】:
我仍在学习那个绳索,但我正在尝试为 HashMap 实现一个比较器,以使用 compareTo 对键进行排序。为了使比较器与 equals 一致,我想尝试从 compareTo 中捕获 int 结果并查看它是否等于 0。如果是,请检查对象是否相等。我遇到的问题是如果对象不相等会发生什么?我必须返回什么?
【问题讨论】:
-
假设类实现了
Comparable,并且compareTo()和equals()的定义,如果compareTo()为零,那么equals()必须返回真......及其相反。在单独的比较器中没有这样的要求,您可以根据需要定义排序。不清楚你在问什么。 -
请注意,您不需要需要
HashMap的比较器。您确实必须确保equals的每两个对象都具有相同的hashCode。 -
这实际上取决于您处理的对象类型。
equals和compareTo给出不同结果的类的一个很好的例子是BigDecimal- 它的compareTo方法比较两个数字的值,但它的equals也检查比例(即,有多少小数给出了位置或有效数字)。现在,如果您正在处理这样一个类,您必须决定当两个数字具有相同的数值但比例不同时该怎么做。比如,你修改后的compareTo会变成3.25 < 3.2500还是3.25 > 3.2500。你必须决定哪个更有意义。 -
你混淆了责任。
compareTo方法的职责是始终为相等的对象返回零。
标签: java hashmap equals comparator compareto