我已经看到有关此异常的其他问题,但我的比较方法非常简单,以至于我无法弄清楚它有什么问题,而且我无法用我拥有的任何 Android 设备重现它。
我从我的 Android 应用程序的一些用户那里得到了这个例外,其中大部分似乎都在非常新的设备上,比如 GS3 或 GS4,我猜它们运行的是合并排序的 Java 7 变体。
这是我的比较方法:
Collections.sort(collectionOfThings, new Comparator<Thing>()
{
public int compare(Thing lhs, Thing rhs)
{
//getDist() returns a Double with a capital D...perhaps that has something to do with it?
if(lhs.getDist() < rhs.getDist())
{
return -1;
}
if(lhs.getDist() == rhs.getDist())
{
return 0;
}
return 1;
};
});
这是一个例外:
Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:743)
at java.util.TimSort.mergeAt(TimSort.java:479)
at java.util.TimSort.mergeCollapse(TimSort.java:404)
at java.util.TimSort.sort(TimSort.java:210)
at java.util.TimSort.sort(TimSort.java:169)
at java.util.Arrays.sort(Arrays.java:2038)
at java.util.Collections.sort(Collections.java:1891)
似乎仅限于Android 4.0+。任何帮助是极大的赞赏。