2013-11-19 2 views
0

У меня есть некоторые проблемы с методом collection.sort().«Метод сравнения нарушает общий контракт» - даже при правильной реализации компаратора

java.lang.IllegalArgumentException: метод сравнения нарушает его общий контракт!

на java.util.TimSort.mergeLo (TimSort.java:747)

на java.util.TimSort.mergeAt (TimSort.java:483)

на java.util.TimSort.mergeCollapse (TimSort.java:410)

на java.util.TimSort.sort (TimSort.java:214)

на java.util.TimSort.sort (TimSort.java:173)

на java.util.Arrays.sort (Arrays.j AVA: 659)

на java.util.Collections.sort (Collections.java:217)

это мой компаратор

public int compare(Key key1, Key key2) 
{ 

    if (key1.Score > key2.Score) 
     return -1; 

    else if(key1.Score < key2.Score) 

     return 1; 

    else 

     return 0; 
} 

Я в настоящее время JDK 1.7, я попытался с 1.6 но это не сработало. Я не могу понять, является ли проблема проблемой с методом сортировки или какой-либо другой проблемой. (Я пытаюсь отсортировать список с более чем 1000 элементами и у него нет никаких NaN).

ответ

1

Нарушение общего договора метода сравнения означает, что он не дает последовательного или правильного ответа. Кажется, этот метод не возвращает тот же результат при одновременном сравнении тех же объектов.

Этот код отлично работает как отдельная версия. У вас есть другие темы, изменяющие элементы коллекции?

Смежные вопросы