私は現在Javaでコレクションをソートしようとしています。 「比較メソッドがその一般契約に違反しています」というエラーメッセージが表示されます。私もこのエラーメッセージを理解していますが、私は(大部分は)buildinのcompareToメソッドをLong型のメソッドを使用しています。だから私は知らない。その場合、ソートのメソッドは依然として契約に違反している。ここに私のコードは次のとおりです。buildin compareTo:比較メソッドがその一般契約に違反しています
@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);
}
そして、ここでエラー:null
sは許可されていると仮定すると
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'なので、常に偽である
また、あなたは
Long
インスタンスを作成する必要はありません。 –