title: Java error: "Comparison method violates its general contract!"
body: <p>I have this code:</p>
  
  <pre><code>package org.optimization.geneticAlgorithm;
  import org.optimization.geneticAlgorithm.selection.Pair;
  
  public abstract class Chromosome implements Comparable&lt;Chromosome&gt; {
      public abstract double fitness();
      public abstract Pair&lt;Chromosome&gt; crossover(Chromosome parent);
      public abstract void mutation();
      public int compareTo(Chromosome o) {
          int rv = 0;
          if (this.fitness() &gt; o.fitness()) {
              rv = -1;
          } else if (this.fitness() &lt; o.fitness()) {
              rv = 1;
          }
          return rv;
      }
  }
  </code></pre>
  
  <p>And every time I run this code I get this error:</p>
  
  <pre><code>Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
  at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:835)
  at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:453)
  at java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:376)
  at java.util.ComparableTimSort.sort(ComparableTimSort.java:182)
  at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
  at java.util.Arrays.sort(Arrays.java:472)
  at java.util.Collections.sort(Collections.java:155)
  at org.optimization.geneticAlgorithm.GeneticAlgorithm.nextGeneration(GeneticAlgorithm.java:74)
  at org.optimization.geneticAlgorithm.GeneticAlgorithm.execute(GeneticAlgorithm.java:40)
  at test.newData.InferenceModel.main(InferenceModel.java:134)
  </code></pre>
  
  <p>I use OpenJDK7u3 and I return 0 when the objects are equal. Can someone explain this error to me?</p>