Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как отсортировать массив

Короткий ответ

Arrays.sort() сортирует массив на месте по возрастанию:

void main() {
    int[] numbers = {10, 9, 1, 100};
    Arrays.sort(numbers);
 
    IO.println(Arrays.toString(numbers));
}

Результат:

[1, 9, 10, 100]

По убыванию

Компаратор работает только с объектами, поэтому массив должен быть Integer[], а не int[]:

void main() {
    Integer[] numbers = {10, 9, 1, 100};
    Arrays.sort(numbers, Comparator.reverseOrder());
 
    IO.println(Arrays.toString(numbers));
}

Результат:

[100, 10, 9, 1]

Строки

Строки сортируются по кодам символов — заглавные буквы раньше строчных. Для сортировки без учёта регистра есть готовый компаратор:

void main() {
    String[] words = {"pear", "apple", "Banana"};
 
    Arrays.sort(words);
    IO.println(Arrays.toString(words));
 
    Arrays.sort(words, String.CASE_INSENSITIVE_ORDER);
    IO.println(Arrays.toString(words));
}

Результат:

[Banana, apple, pear]
[apple, Banana, pear]

По полю объекта

Comparator.comparing() создаёт компаратор по значению поля:

record User(String name, int age) {}
 
void main() {
    User[] users = {new User("Anna", 30), new User("Oleg", 25)};
    Arrays.sort(users, Comparator.comparing(User::age));
 
    IO.println(Arrays.toString(users));
}

Результат:

[User[name=Oleg, age=25], User[name=Anna, age=30]]

Не менять исходный массив

Arrays.sort() меняет сам массив. Чтобы сохранить исходный порядок, отсортируйте копию:

void main() {
    int[] numbers = {3, 1, 2};
    int[] sorted = numbers.clone();
    Arrays.sort(sorted);
 
    IO.println(Arrays.toString(numbers));
    IO.println(Arrays.toString(sorted));
}

Результат:

[3, 1, 2]
[1, 2, 3]

Частая ошибка

Передать компаратор вместе с int[]. Для массивов примитивов такого метода нет:

void main() {
    int[] numbers = {3, 1, 2};
    Arrays.sort(numbers, Comparator.reverseOrder());
}

Результат:

Main.java:3: error: no suitable method found for sort(int[],Comparator<T#1>)

Используйте Integer[] или отсортируйте по возрастанию и пройдите массив с конца.

Функции из этого ответа

  • Arrays.sort() — Сортирует массив на месте — по возрастанию или по заданному компаратору.
  • Comparator.reversed() — Возвращает компаратор с обратным порядком. Для естественного порядка есть Comparator.reverseOrder().
  • Comparator.comparing() — Создаёт компаратор, который сравнивает объекты по одному полю.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.