Почему эта программа, использующая Collections.sort, не работает только для списков размером 32 или больше?

Следующая программа выдает следующее исключение:

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

Я понимаю проблему сComparator, УвидетьНевозможно воспроизвести: «Метод сравнения нарушает его общий контракт!»

Я не понимаю, почему это терпит неудачу только дляListс размером 32 или более. Кто-нибудь может объяснить?

class Experiment {

    private static final class MyInteger {
        private final Integer num;

        MyInteger(Integer num) {
            this.num = num;
        }
    }

    private static final Comparator<MyInteger> COMPARATOR = (r1, r2) -> {
        if (r1.num == null || r2.num == null)
            return 0;
        return Integer.compare(r1.num, r2.num);
    };

    public static void main(String[] args) {
        MyInteger[] array = {new MyInteger(0), new MyInteger(1), new MyInteger(null)};
        Random random = new Random();
        for (int length = 0;; length++) {
            for (int attempt = 0; attempt < 100000; attempt++) {
                List<MyInteger> list = new ArrayList<>();
                int[] arr = new int[length];
                for (int k = 0; k < length; k++) {
                    int rand = random.nextInt(3);
                    arr[k] = rand;
                    list.add(array[rand]);
                }
                try {
                    Collections.sort(list, COMPARATOR);
                } catch (Exception e) {
                    System.out.println(arr.length + " " + Arrays.toString(arr));
                    return;
                }
            }
        }
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос