Запутался, как эта строка кода Java сортируется в порядке убывания - PullRequest
0 голосов
/ 17 марта 2020

впервые публикуется здесь. Я пытаюсь понять, как этот метод сортировки Java на самом деле сортирует массив. Я уже использовал визуализатор Java, и он все еще не имеет смысла для меня. Я понимаю, что метод сортировки принимает массив, а затем использует два элемента одновременно, чтобы передать их в выражение (второе число минус первое число), но я не понимаю, как это значение используется для сортировки массива :

Arrays.sort(arrayList,(Integer number1, Integer number2) -> number2 - number1)

(элементы arrayList могут быть любыми целыми числами)

Ответы [ 3 ]

0 голосов
/ 17 марта 2020
Arrays.sort(arrayList,(Integer number1, Integer number2) -> number2 - number1)

Имеет два параметра: первый - array, а второй - класс Comparator. Метод Arrays.sort() внутренне использует этот экземпляр comparator для сравнения элементов при сортировке. Вот один фрагмент из его внутренней реализации, здесь c - ваш экземпляр вашего Comparator.

  if (length < INSERTIONSORT_THRESHOLD) {
        for (int i=low; i<high; i++)
            for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)
                swap(dest, j, j-1);
        return;
    }
0 голосов
/ 17 марта 2020

Если функция компаратора возвращает положительное значение, числа меняются местами. => если число2> число1, то (число2 - число1)> 0 (положительное число) => поменять местами => число2 будет помещено до и число 1.

Подробности можно проверить в функции Comparator.compare:

        Arrays.sort(values, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if (o2 > o1) {
                    return 1; // need swap
                } else if (o2 < o1) {
                    return -1; // no swap
                }

                return 0; // no swap
            }
        });
    }
0 голосов
/ 17 марта 2020

Если вы понимаете, как работает array.sort. Затем вам нужно будет понять, как работает компаратор.

obj1 > obj2 if x > 0.
obj1 < obj2 if x < 0.
obj1 equals obj2 if x = 0.

, поэтому в этом случае

(Integer number1, Integer number2) -> number2 - number1

, если num2 - num1 вернет положительное число, означающее num2-num1> 0, то оно будет рассматриваться как num2> num1 и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...