JavaRush /Курси /JAVA 25 SELF /Клас Arrays: sort, fill, copyOf, equals

Клас Arrays: sort, fill, copyOf, equals

JAVA 25 SELF
Рівень 7 , Лекція 5
Відкрита

1. Вступ

Масиви в Java — потужний інструмент, але базовий синтаксис швидко перетворюється на рутину. На допомогу приходить клас java.util.Arrays — набір статичних методів для роботи з масивами: сортування, копіювання, порівняння, форматоване виведення тощо. Створювати екземпляри не потрібно — усі методи статичні й викликаються через імʼя класу.

Щоб використовувати ці методи, додайте директиву import на початок файлу:

import java.util.Arrays;

Якщо ви забудете додати import, компілятор повідомить, що Arrays «не знайдено» — це очікувана поведінка без імпорту.

2. Сортування масиву: Arrays.sort

Як працює Arrays.sort

Синтаксис


Arrays.sort(масив);
Arrays.sort(масив, початковийІндекс, кінцевийІндекс);
Сортування всього масиву або піддіапазону

Метод сортує «на місці» — змінює вихідний масив і не повертає новий. Якщо ви хочете зберегти початковий порядок, спершу скопіюйте масив.

Приклад: сортування масиву цілих чисел

int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Сортуємо за зростанням

System.out.println("Відсортований масив: " + Arrays.toString(scores));
// Виведе: [1, 2, 5, 7, 9]

Приклад: сортування масиву рядків

String[] names = {"Василь", "Петро", "Анна", "Ігор"};
Arrays.sort(names);

System.out.println(Arrays.toString(names));
// [Анна, Василь, Ігор, Петро]

Важливо: рядки сортуються лексикографічно (за абеткою), числа — за зростанням.

Сортування частини масиву

int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // сортує елементи з індексу 1 до 3 включно (4 не включається)

System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]

Особливості

  • Сортування «на місці»: вихідний масив змінюється.
  • Числа — за зростанням, рядки — за абеткою.
  • Для складних об’єктів використовуйте перевантаження з Comparator.

3. Заповнення масиву: Arrays.fill

Синтаксис


Arrays.fill(масив, значення);
Arrays.fill(масив, початковийІндекс, кінцевийІндекс, значення);
Заповнення всього масиву або діапазону одним значенням

Метод заповнює всі елементи або вказану частину масиву одним і тим самим значенням.

int[] marks = new int[5];
Arrays.fill(marks, 3); // Усі елементи тепер дорівнюють 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]

Заповнення частини масиву

int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // Заповнить елементи з індексу 2 до 4 включно (5 не включається)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]

Заповнення масиву рядків

String[] guests = new String[4];
Arrays.fill(guests, "Порожньо");
System.out.println(Arrays.toString(guests)); // [Порожньо, Порожньо, Порожньо, Порожньо]

4. Копіювання масиву: Arrays.copyOf і Arrays.copyOfRange

Arrays.copyOf

Синтаксис


Arrays.copyOf(вихіднийМасив, новаДовжина);
Створення нової копії із заданою довжиною

Створює новий масив і копіює елементи з вихідного. Якщо нова довжина більша за вихідну, «хвіст» заповнюється значеннями за замовчуванням (0 для int, null для посилальних типів).

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]

Зменшення масиву

int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]

Arrays.copyOfRange

Синтаксис


Arrays.copyOfRange(вихіднийМасив, початковийІндекс, кінцевийІндекс);
Копіювання підмасиву в новий масив
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // Скопіює елементи з індексу 1 по 3
System.out.println(Arrays.toString(mid)); // [20, 30, 40]

5. Порівняння масивів: Arrays.equals і Arrays.deepEquals

У Java не можна порівнювати масиви через == — так порівнюються посилання, а не вміст:

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!

Як порівнювати вміст?


Arrays.equals(масив1, масив2);
Arrays.deepEquals(матриця1, матриця2);
Поверхневе та глибоке порівняння
System.out.println(Arrays.equals(a, b)); // true

Для одновимірних масивів використовуйте Arrays.equals, для двовимірних і глибших — Arrays.deepEquals.

Приклад: порівняння двовимірних масивів

int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};

System.out.println(Arrays.equals(matrix1, matrix2));     // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true

6. Гарне виведення масиву: Arrays.toString і Arrays.deepToString

Пряме виведення масиву дає нечитабельний рядок:

int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d

Синтаксис


Arrays.toString(масив);
Arrays.deepToString(матриця);
Форматоване виведення одновимірних і багатовимірних масивів
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]

7. Типові помилки при роботі з класом Arrays

Помилка № 1: спроба порівняти масиви через ==
Масиви — об’єкти, а == порівнює лише посилання. Навіть за однакових значень результат буде false. Використовуйте Arrays.equals (для одновимірних) або Arrays.deepEquals (для багатовимірних).

Помилка № 2: забули, що сортування змінює масив «на місці»
Якщо потрібен початковий порядок, спершу зробіть копію через Arrays.copyOf, а вже потім сортуйте копію. Інакше оригінал втратить свій порядок.

Помилка № 3: хибне розуміння меж у Arrays.fill і Arrays.copyOfRange
Методи використовують напіввідкритий діапазон: правий індекс не включається. Наприклад, Arrays.fill(arr, 2, 5, 9) заповнить індекси 2, 3, 4, а елемент з індексом 5 не зачепить.

Помилка № 4: спроба вивести масив напряму
Виклик System.out.println(arr) виводить технічне представлення. Використовуйте Arrays.toString для одновимірних і Arrays.deepToString для багатовимірних масивів.

Помилка № 5: порівняння багатовимірних масивів через Arrays.equals
Метод порівнює лише верхній рівень (посилання на внутрішні масиви). Для порівняння вмісту використовуйте Arrays.deepEquals.

1
Опитування
Масиви, рівень 7, лекція 5
Недоступний
Масиви
Знайомство з масивами
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ