【发布时间】:2015-04-25 12:55:28
【问题描述】:
我收到以下错误:“比较方法违反了它的一般合同!”使用以下比较器时,但是我无法使用 jUnit 复制异常。我想知道是什么导致了这个问题以及如何复制它。有其他人有同样问题但不知道如何复制它的例子。
public class DtoComparator implements Comparator<Dto> {
@Override
public int compare(Dto r1, Dto r2) {
int value = 0;
value = r1.getOrder() - r2.getOrder();
if (value == 0 && !isValueNull(r1.getDate(), r2.getDate()))
value = r1.getDate().compareTo(r2.getDate());
return value;
}
private boolean isValueNull(Date date, Date date2) {
return date == null || date2 == null;
}
}
代码调用使用:
Collections.sort(dtos, new DtoComparator());
感谢您的帮助。
额外信息: 该错误似乎发生在 Java utils 中的 TimSort 类中以及来自名为 mergeLo 的方法中。 链接:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/TimSort.java#TimSort.mergeLo%28int%2Cint%2Cint%2Cint%29
【问题讨论】:
-
你们有非常大的订单(正的或负的)吗?
-
嗨immibis,订单范围从1-20
-
对于长度 >= 32 的列表为什么它失败的问题刚刚得到回答 here
标签: java sorting exception compare comparator