【发布时间】:2013-04-19 07:37:37
【问题描述】:
我正在尝试重现此异常(java.lang.IllegalArgumentException:比较方法违反其一般约定!)因为我需要调试一段代码,但下面的代码从不抛出它,
try {
ArrayList al = new ArrayList();
for (int i = 1; i <= 36; i++) {
TypeAdapterSort t = new TypeAdapterSort();
t.order = i;
al.add(t);
}
System.out.println(al.size());
Collections.sort(al, new Comparator() {
public int compare(Object o1, Object o2) {
TypeAdapterSort tas1 = (TypeAdapterSort) o1;
TypeAdapterSort tas2 = (TypeAdapterSort) o2;
if (tas1.order < tas2.order)
return -1;
else
return 1;
}
});
} catch (Exception e) {
System.out.println(e);
}
另外,当我检查 JDK 代码时,似乎只有当要排序的集合的大小大于 32 时,Collections.sort 方法才会引发此异常?应该在代码块中进行哪些更改,以便 Collections.sort 抛出此异常。
【问题讨论】:
-
是的,这段代码在我不知道的数据集上抛出了异常。因为我只知道例外,我希望它被复制,以便我可以确定是什么类型的数据导致它发生。
-
@MarcoForberg 据我计算,它是the seventh。
-
是的。我提到的三次是我亲眼看到的;)
-
@Marco:我从来没有任何解决方案来重现这个异常,任何这样做的代码都会有很大的帮助!!
标签: java collections comparator