【发布时间】:2016-07-25 10:57:35
【问题描述】:
我目前正在努力用 Java 对集合进行排序。我收到错误消息“比较方法违反其一般合同”。我也理解这个错误消息,但我(主要)使用的是 Long 类型的 buildin compareTo-Method。所以我不知道,在这种情况下 sort 方法仍然违反合同。这是我的代码:
@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)
【问题讨论】:
-
注意:
this == null总是假的。
标签: java sorting collections