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.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ