gpt4 book ai didi

java - 建筑物 compareTo : Comparison method violates its general contract

转载 作者:行者123 更新时间:2023-11-29 06:53:57 26 4
gpt4 key购买 nike

我目前正在努力用 Java 对集合进行排序。我收到错误消息“Comparison method violates its General contract”。我也理解此错误消息,但我(主要)使用 Long 类型的内置 compareTo-Method。所以我不知道,在这种情况下 sort 方法仍然违反了契约(Contract)。这是我的代码:

@Override
public int compareTo(DataAge another) {
if(this == null || another == null)
return 0;

Long a = new Long(this.getAge());
Long b = new Long(another.getAge());
return a.compareTo(b);
}

这里是错误:

Java exception occurred:
java.lang.IllegalArgumentException: Comparison method violates its general contract!

at java.util.ComparableTimSort.mergeLo(Unknown Source)

at java.util.ComparableTimSort.mergeAt(Unknown Source)

at java.util.ComparableTimSort.mergeCollapse(Unknown Source)

at java.util.ComparableTimSort.sort(Unknown Source)

at java.util.ComparableTimSort.sort(Unknown Source)

at java.util.Arrays.sort(Unknown Source)

at java.util.Collections.sort(Unknown Source)

at dd.GMAAnalyzer.sortData(Analyzer.java:158)

最佳答案

假设 null 是允许的,你的方法的逻辑是不正确的,因为 null 比较等于任何东西。这是错误的,因为它将比较等于多个本身不相等的事物,从而破坏了传递性。

要解决此问题,请确定 null 应该排在其他数字的前面还是后面,并添加一个单独的 null 比较(this 不能等于 null,因此您不需要对其进行比较)。

if(another == null)
return 1; // If you want nulls in the back, return -1

关于java - 建筑物 compareTo : Comparison method violates its general contract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38565922/

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