Witam poniżej to moja metoda porównania mojego porównania. Nie jestem pewien, co jest nie tak. Sprawdziłem inne podobne pytania i odpowiedzi na temat przepełnienia stosu, ale nie jestem pewien, co jest nie tak z moją metodą, ale wciąż dostaję java.lang.IllegalArgumentException: Metoda porównania narusza ogólną umowę!java.lang.IllegalArgumentException: Metoda porównania narusza ogólny kontrakt
Każda pomoc będzie mile widziana
public int compare(Node o1, Node o2)
{
HashMap<Integer,Integer> childMap = orderMap.get(parentID);
if(childMap != null && childMap.containsKey(o1.getID()) &&
childMap.containsKey(o2.getID()))
{
int order1 = childMap.get(o1.getID());
int order2 = childMap.get(o2.getID());
if(order1<order2)
return -1;
else if(order1>order2)
return 1;
else
return 0;
}
else
return 0;
}
Dodawanie wyjątku jestem coraz
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:747)
at java.util.TimSort.mergeAt(TimSort.java:483)
at java.util.TimSort.mergeCollapse(TimSort.java:410)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
W jakiej linii występuje wyjątek? –
@tieTYT Myślę, że wyjątek jest wyrzucany z kolekcji, którą przekazuje jako "Komparator". Ten komparator wygląda na naprawdę niestabilny, ponieważ wszelkie modyfikacje * 'orderMap [parentID]' * lub kolejność określona w 'childMap' przeniesie elementy dookoła. – chrylis
Co to jest typ "parentId"? Czy przechowujesz mapę HashMap na mapie? –