#java
Вопрос:
Может ли кто-нибудь сказать, в чем разница между этими строками?
Arrays.sort(pairs, (a, b) -> a[0] - b[0])
Arrays.sort(pairs, (a, b) -> a[1] - b[1]);
Комментарии:
1. Первая строка не будет скомпилирована из-за отсутствия
;
в конце. Но если мы добавим, что;
он попытается отсортировать массивы на основе значений их первого столбца (доступ через[0]
). Второй попытается выполнить сортировку на основе значений второго столбца (доступ через[1]
).2. Кроме того, сравнение значений с помощью вычитания может завершиться неудачей, если произойдет переполнение/недопоток целого числа, поэтому лучше использовать
Integer::compare
Ответ №1:
Первые сортировки основаны на первом элементе сортируемых массивов, а другие — на следующем элементе.
Если ввод был:
[2, 33], [4, 22], [3, 11]
Первый будет производить
[2, 33], [3, 11], [4, 22]
и второй бы произвел
[3, 11], [4, 22], [2, 33]
Ответ №2:
В соответствии с вашим кодексом. Похоже, что первая строка не будет выполнена. Потому что в нем отсутствует терминатор.
Arrays.sort(pairs, (a, b) -> a[0] - b[0]);
И вторая строка будет запущена, и она выдает результат в соответствии с вашими входными данными.
Arrays.sort(pairs, (a, b) -> a[1] - b[1]);