Сортировка 2d массивов с помощью массивов.сортировка на java

#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]);