小编Ast*_*tro的帖子

Java7-比较方法违反了其一般约定(TimSort.java)

这是我得到的堆栈跟踪

Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
        at java.util.TimSort.mergeLo(TimSort.java:777)
        at java.util.TimSort.mergeAt(TimSort.java:514)
        at java.util.TimSort.mergeCollapse(TimSort.java:441)
        at java.util.TimSort.sort(TimSort.java:245)
        at java.util.Arrays.sort(Arrays.java:1512)
        at java.util.ArrayList.sort(ArrayList.java:1454)
        at java.util.Collections.sort(Collections.java:175)
        at xxx.sortDisplayFields(OfferFieldLayout.java:521)
Run Code Online (Sandbox Code Playgroud)

这是比较方法:

  public int compare(Field pObject1, Field pObject2)
{
    int compare = 0;              

   //...
    if (compare == 0)
    {
        if (pObject1.hashCode() <= pObject2.hashCode())
        {
            compare = -1;
        }
        else
        {
            compare =  1;
        }
    }

    return compare;
}
Run Code Online (Sandbox Code Playgroud)

我认为这是由于不尊重传递性而导致的:传递性:如果A> B和B> C,那么对于任何A,B和C:A>C。我试图提出一个反例,但我失败了在这里,任何帮助表示赞赏!

java sorting java-7

0
推荐指数
1
解决办法
3529
查看次数

标签 统计

java ×1

java-7 ×1

sorting ×1