gpt4 book ai didi

java - 我可以将 Collections.sort 与 quasiorder 一起使用吗?

转载 作者:行者123 更新时间:2023-11-30 08:45:51 26 4
gpt4 key购买 nike

全准序(也称为全预序)是一种较弱的排序关系,允许将两个不同的元素视为“相同大小”。例如,所有字符串的集合按长度准排序,因为两个不同的字符串可以具有相同的长度。

现在假设我们有一个字符串列表,我们想按长度对它进行排序(最短的在前)。如果两个字符串的长度相同,我们不关心哪个在先。乍一看,这样写似乎有道理

Collections.sort(list, (s, t) -> s.length() - t.length());

不幸的是,这是非法的。 Comparator 接口(interface)的 Javadoc 明确要求比较必须实现总排序。这是违反的,因为“a”.length() - “b”.length() 等于 0,但“a”.equals(“b”) 为假。

那么,我们应该如何干净地做到这一点?干净利落的意思是不引入虚假比较,例如通过哈希码或自然排序。

最佳答案

您误解了文档。当他们说

A comparison function, which imposes a total ordering on some collection of objects.

那是定义,不是要求。对于给定的 Comparatorc,如果 c.compare(o1, o2) == 0,则 c定义的顺序,o1o2是相等的。

文档继续讨论 Comparator “与等于一致”意味着什么,这基本上意味着 Comparator 中固有的平等意识,如上所述,与允许对象的 equals() 方法中固有的相同。该讨论基于某些 Comparator 不具有该特性的可能性,而您提议的则没有。使用这样的 Comparator 来排序 SortedSetSortedMap 可能会产生违反这些接口(interface)约定的行为,但是使用这样的方法并没有错带有 Collections.sort()Comparator

关于java - 我可以将 Collections.sort 与 quasiorder 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33112994/

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