Java sort throws java.lang.IllegalArgumentException: Comparison method violates its general contract

Tom

The following lines:

ArrayList<ShowdownSingleValueVO> sortedValues = new ArrayList<>();
(...fill the array...)
Collections.sort(sortedValues);

Return the following exception: Comparison method violates its general contract!

I understand that this exception is typically generated when the comparison method is not properly implemented but, in my case, its implementation is fairly obvious:

public static class ShowdownSingleValueVO implements Comparable<ShowdownSingleValueVO>{
    int hashValue;
    byte showdownValue;
    public ShowdownSingleValueVO(int hashValue, byte showdownValue) {
        this.hashValue = hashValue;
        this.showdownValue = showdownValue;
    }
    @Override
    public int compareTo(ShowdownSingleValueVO o) {
        return this.hashValue - o.hashValue;
    }
}

As you can see, the objective is to have the values sorted by their hashValue attribute.

Any idea / hint on what I'm doing wrong would be greatly appreciated !

Thanks, Thomas

Sergey Kalinichenko

Most likely you are running into an int overflow. Since hash codes could be arbitrarily large in magnitude, it is conceivable that subtraction would overflow for some pairs of values, producing a positive when subtracting two negative numbers.

Replace subtraction with the implementation from Integer to fix this problem:

public int compareTo(ShowdownSingleValueVO o) {
    return Integer.compare(this.hashValue, o.hashValue);
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

java.lang.IllegalArgumentException: Comparison method violates its general contract

From Dev

java.lang.IllegalArgumentException Comparison method violates its general contract! in Collections#sort

From Dev

java.lang.IllegalArgumentException: Comparison method violates its general contract! java.util.Date

From Dev

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Comparison method violates its general contract

From Dev

Random error - java.lang.IllegalArgumentException: Comparison method violates its general contract

From Dev

Java Collections sort: Comparison method violates its general contract

From Dev

Collections.sort - IllegalArgumentException: Comparison method violates its general contract

From Dev

java exception: Comparison method violates its general contract

From Dev

Java 7 - "Comparison method violates its general contract!"

From Dev

Java 7 - "Comparison method violates its general contract!"

From Dev

Comparison method violates its general contract! Java7 Comparator

From Dev

Java Collections sort: DEBUG/VERBOSE the RootCause of "Comparison method violates its general contract:" errors

From Dev

IllegalArgumentException: Comparison method violates its general contract! on Integer[]

From Dev

Collections.sort() throws Comparison method violates its general contract! exception

From Dev

Collections.sort comparison method violates its general contract

From Dev

IllegalArgumentException: Comparison method violates general contract

From Dev

Android: Comparison method violates its general contract

From Dev

Comparison method violates its general contract while comparing java.util.Date

From Dev

Comparison method violates its general contract and method compareTo

From Dev

Comparison method violates its general contract and method compareTo

From Dev

buildin compareTo: Comparison method violates its general contract

From Dev

Unable to replicate : "Comparison method violates its general contract!"

From Dev

"Comparison method violates its general contract!", everything seems OK

From Dev

Spark Streaming, foreachRDD error : Comparison method violates its general contract

From Dev

Comparison method violates its general contract even after checking for null

From Dev

Java Comparator: Violates General Contract

From Dev

Another Comparison method that violates its contract

From Dev

Can't see why i am getting "Comparison method violates its general contract" error

From Dev

Cannot install Liferay IDE plugin - Comparison method violates its general contract

Related Related

  1. 1

    java.lang.IllegalArgumentException: Comparison method violates its general contract

  2. 2

    java.lang.IllegalArgumentException Comparison method violates its general contract! in Collections#sort

  3. 3

    java.lang.IllegalArgumentException: Comparison method violates its general contract! java.util.Date

  4. 4

    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Comparison method violates its general contract

  5. 5

    Random error - java.lang.IllegalArgumentException: Comparison method violates its general contract

  6. 6

    Java Collections sort: Comparison method violates its general contract

  7. 7

    Collections.sort - IllegalArgumentException: Comparison method violates its general contract

  8. 8

    java exception: Comparison method violates its general contract

  9. 9

    Java 7 - "Comparison method violates its general contract!"

  10. 10

    Java 7 - "Comparison method violates its general contract!"

  11. 11

    Comparison method violates its general contract! Java7 Comparator

  12. 12

    Java Collections sort: DEBUG/VERBOSE the RootCause of "Comparison method violates its general contract:" errors

  13. 13

    IllegalArgumentException: Comparison method violates its general contract! on Integer[]

  14. 14

    Collections.sort() throws Comparison method violates its general contract! exception

  15. 15

    Collections.sort comparison method violates its general contract

  16. 16

    IllegalArgumentException: Comparison method violates general contract

  17. 17

    Android: Comparison method violates its general contract

  18. 18

    Comparison method violates its general contract while comparing java.util.Date

  19. 19

    Comparison method violates its general contract and method compareTo

  20. 20

    Comparison method violates its general contract and method compareTo

  21. 21

    buildin compareTo: Comparison method violates its general contract

  22. 22

    Unable to replicate : "Comparison method violates its general contract!"

  23. 23

    "Comparison method violates its general contract!", everything seems OK

  24. 24

    Spark Streaming, foreachRDD error : Comparison method violates its general contract

  25. 25

    Comparison method violates its general contract even after checking for null

  26. 26

    Java Comparator: Violates General Contract

  27. 27

    Another Comparison method that violates its contract

  28. 28

    Can't see why i am getting "Comparison method violates its general contract" error

  29. 29

    Cannot install Liferay IDE plugin - Comparison method violates its general contract

HotTag

Archive