gpt4 book ai didi

Java 的比较器契约

转载 作者:行者123 更新时间:2023-12-03 06:11:42 26 4
gpt4 key购买 nike

Comparator接口(interface)的契约中规定,它必须与equals一致。

这是否意味着如果 equalsTo = true 则 Comparator = 0,或者是否意味着当且仅当 equalsTo = true 时 Comparator = 0?

我似乎记得它是第二个,但我遇到过很多按非唯一子属性排序的比较器。

例如,我可能有一些具有子属性日期的对象,并且我想按提交日期对对象列表进行排序。但是,您可以拥有多个具有相同日期的对象吗?这会带来什么后果?这个问题肯定已经有最佳实践解决方案了吗?如何在不违反比较器契约的情况下按不能保证唯一的属性对集合进行排序?此类违规行为会产生什么后果?它们可以管理吗?

最佳答案

Comparator 必须与 equals 一致的说法根本不正确。

文档仅警告这种情况:

Caution should be exercised when using a comparator capable of imposing an ordering inconsistent with equals to order a sorted set (or sorted map) (http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html)

如果您有一个基于日期的排序,另一个基于日期+时间的排序,您应该简单地实现多个比较器。

也许您混淆了 Comparator 和 Comparable?对于可比性,文档强烈建议不要出现这种情况:

It is strongly recommended (though not required) that natural orderings be consistent with equals. (http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html)

如果您意识到一个对象只能有 1 个 Comparable 实现,但有多个 Comparator 实现,那么这种差异是有意义的。 Comparator 的整体思想是有多种方法来比较同一类。

关于Java 的比较器契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22909768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com