【问题标题】:Rules to implement compare method实现比较方法的规则
【发布时间】:2013-01-21 20:33:38
【问题描述】:

像 compareTo 一样,必须是“自反的、反对称的和传递的”,有什么规则可以实现 compare 方法吗? 谢谢

【问题讨论】:

  • 你是认真的吗? compare() 方法的唯一规则是当两个对象相等时返回 true,当它们不相等时返回 false。如果没有具体的比较方法和需要比较的具体对象,您最好判断该方法需要评估这两个对象是否应该被视为“相等”。
  • @gepeppe 我认为你需要详细说明
  • 我认为 OP 只是想知道 compare() 是否存在与 compareTo 相同的通用合同。我认为新手的合法问题。
  • @Fildor:很公平。唯一应该关注的规则是确保它与 equals() 一致,或者注意它们不是。

标签: java compare rules comparator compareto


【解决方案1】:

来自Comparator API

  1. 实施者必须确保所有 x 和 y 的 sgn(compare(x, y)) == -sgn(compare(y, x))。 (这意味着 compare(x, y) 必须抛出异常当且仅当 compare(y, x) 抛出 例外。)
  2. 实现者还必须确保关系是可传递的:((compare(x, y)>0) && (compare(y, z)>0)) 意味着 compare(x, z)>0。
  3. 最后,实现者必须确保 compare(x, y)==0 意味着所有 z 的 sgn(compare(x, z))==sgn(compare(y, z))。
  4. 一般是这样,但不严格要求 (compare(x, y)==0) == (x.equals(y))。一般来说,任何 违反此条件的比较器应清楚地表明这一点 事实。推荐的语言是“注意:这个比较器强加 与 equals 不一致的排序。”

【讨论】:

  • 几乎复制/粘贴了他的“反身、反对称和传递”评论。
  • @Shark 这就是文档中的内容。是的,它是从 API 复制/粘贴的。 :)
  • 仍然是一个赞成票,因为它非常清楚应该做什么...... :)
猜你喜欢
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2012-11-13
相关资源
最近更新 更多