【问题标题】:Making a comparator consistent with equals使比较器与等于一致
【发布时间】:2021-07-29 04:09:40
【问题描述】:

我仍在学习那个绳索,但我正在尝试为 HashMap 实现一个比较器,以使用 compareTo 对键进行排序。为了使比较器与 equals 一致,我想尝试从 compareTo 中捕获 int 结果并查看它是否等于 0。如果是,请检查对象是否相等。我遇到的问题是如果对象不相等会发生什么?我必须返回什么?

【问题讨论】:

  • 假设类实现了Comparable,并且compareTo()equals()的定义,如果compareTo()为零,那么equals()必须返回真......及其相反。在单独的比较器中没有这样的要求,您可以根据需要定义排序。不清楚你在问什么。
  • 请注意,您不需要需要HashMap 的比较器。您确实必须确保equals 的每两个对象都具有相同的hashCode
  • 这实际上取决于您处理的对象类型。 equalscompareTo 给出不同结果的类的一个很好的例子是 BigDecimal - 它的 compareTo 方法比较两个数字的值,但它的 equals 也检查比例(即,有多少小数给出了位置或有效数字)。现在,如果您正在处理这样一个类,您必须决定当两个数字具有相同的数值但比例不同时该怎么做。比如,你修改后的compareTo 会变成3.25 < 3.2500 还是3.25 > 3.2500。你必须决定哪个更有意义。
  • 你混淆了责任。 compareTo 方法的职责是始终为相等的对象返回零。

标签: java hashmap equals comparator compareto


【解决方案1】:

一个 int 值:如果字符串等于另一个字符串,则为 0。

因此你可以返回 0 表示相等,1 表示大于,-1 表示小于

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多