Уявіть комірки в камері схову. Кожна має свій номер, і в кожній зберігається якийсь об'єкт – «багаж». Або винну карту, де всі види вина пронумеровані, і коли ви робите замовлення, вам достатньо назвати номер напою. Або список студентів групи, у якому в першій комірці записаний студент «Андрєєв», а в останній – «Яковлєва». Або список пасажирів літака, за кожним із яких закріплено місце з певним номером. У Java для роботи з подібними структурами, тобто множиною однотипних даних, часто використовують масиви.

Що таке масив?

Масив – це структура даних, у якій зберігаються елементи одного типу. Його можна уявити як набір пронумерованих комірок, у кожну з яких можна помістити якісь дані (один елемент даних в одну комірку). Доступ до конкретної комірки здійснюється через її номер. Номер елемента в масиві також називають індексом. У Java масив однорідний, тобто в усіх його комірках зберігатимуться елементи одного типу. Так, масив цілих чисел містить лише цілі числа (наприклад, типу int), масив рядків – лише рядки, а масив з елементів створеного нами класу Dog міститиме лише об'єкти Dog. Тобто в Java ми не можемо помістити в першу комірку масиву ціле число, у другу – String, а в третю – "собаку". Масиви в Java - 1

Оголошення масиву

Як оголосити масив?

Як і будь-яку змінну, масив у Java потрібно оголосити. Зробити це можна одним із двох способів. Вони рівноправні, але перший із них краще відповідає стилю Java. Другий же – спадщина мови C (багато програмістів на C переходили на Java, і для їхньої зручності було залишено альтернативний спосіб). У таблиці наведено обидва способи оголошення масиву в Java:
Оголошення масиву, Java-синтаксис Приклади Коментар
1.
dataType[] arrayName;
int[] myArray;
Object[]
arrayOfObjects;
Бажано оголошувати масив саме таким способом – це Java-стиль.
2.
dataType arrayName[];
int myArray[];
span class="token class-name">Object
arrayOfObjects[];
Успадкований від C/C++ спосіб оголошення масивів, який працює і в Java.
В обох випадках dataType – тип змінних у масиві. У прикладах ми оголосили два масиви. В одному зберігатимуться цілі числа типу int, в іншому – об'єкти типу Object. Таким чином, під час оголошення масив отримує ім'я і тип (тип змінних масиву). arrayName – це ім'я масиву.

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

Як створити масив?

Як і будь-який інший об'єкт, створити масив Java, тобто зарезервувати під нього місце в пам'яті, можна за допомогою оператора new. Робиться це так:
new typeOfArray [length];
Де typeOfArray – це тип масиву, а length – його довжина (тобто кількість комірок), що задається цілим числом (int). Однак тут ми лише виділили пам'ять під масив, але не пов'язали створений масив із жодною оголошеною змінною. Зазвичай масив спочатку оголошують, а потім створюють, наприклад:
int[] myArray; // оголошення масиву
myArray = new int[10]; // Створення, тобто, виділення пам'яті для масиву на 10 елементів типу int
Тут ми оголосили масив цілих чисел з ім'ям myArray, а потім вказали, що він складається з 10 комірок (у кожній з яких зберігатиметься якесь ціле число). Однак набагато частіше масив створюють відразу після оголошення за допомогою такого скороченого синтаксису:
int[] myArray = new int[10]; // оголошення та виділення пам'яті "в одному флаконі"
Зверніть увагу: Після створення масиву за допомогою new у його комірках записані значення за замовчуванням. Для числових типів (як і в прикладі) це буде 0, для booleanfalse, для посилальних типів – null. Таким чином, після операції
int[] myArray = new int[10];
ми отримуємо масив із десяти цілих чисел, і, поки це не зміниться в ході програми, у кожному осередку записано 0.

Більше інформації про масиви є у статті " Дещо про масиви "

Довжина масиву в Java

Як ми вже говорили вище, довжина масиву – це кількість елементів, на яку він розрахований. Довжину масиву не можна змінити після створення. Зверніть увагу: Java-елементи масиву нумеруються з нуля. Тобто, якщо ми маємо масив із 10 елементів, то перший елемент масиву матиме індекс 0, а останній – 9. Масиви в Java - 2Отримати доступ до довжини масиву можна за допомогою змінної length . Приклад:
int[] myArray = new int[10]; // створабо масив цілих чисел на 10 елементів і надали йому ім'я myArray
System.out.println(myArray.length); // вивели в консоль довжину масиву, тобто кількість елементів, які ми можемо помістити в масив
Вивід програми:
10

Ініціалізація масиву та доступ до його елементів

Як створити масив у Java, вже зрозуміло. Після цієї процедури ми отримуємо не порожній масив, а масив, заповнений значеннями за замовчуванням. Наприклад, у випадку int це будуть 0, а якщо у нас масив із даними посилального типу, то за замовчуванням у кожній комірці буде записано null. Доступ до елемента масиву (тобто запис значення, виведення його на екран або виконання з ним будь-якої операції) здійснюється за його індексом. Ініціалізація масиву – це заповнення його конкретними даними (не значеннями за замовчуванням). Приклад: давайте створимо масив із 4 сезонів і заповнимо його рядковими значеннями – назвами цих сезонів.
String[] seasons  = new String[4]; /* оголосабо та створабо масив. Java виділила пам'ять під масив із 4 рядків, і зараз у кожному осередку записано значення null (оскільки рядок – тип посилання)*/

seasons[0] = "Winter"; /* в першу комірку, тобто в комірку з нульовим номером ми записали рядок Winter. Тут ми отримуємо доступ до нульового елементу масиву та записуємо туди конкретне значення */
seasons[1] = "Spring"; // Проробляємо ту ж процедуру з осередком номер 1 (другий)
seasons[2] = "Summer"; // ...номер 2
seasons[3] = "Autumn"; // та з останньої, номер 3
Тепер у всіх чотирьох комірках нашого масиву записані назви сезонів. Ініціалізацію також можна виконати по-іншому, поєднавши її з оголошенням масиву:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
Більше того, оператор new можна опустити:
String[] seasons  = {"Winter", "Spring", "Summer", "Autumn"};

Як вивести масив Java на екран?

Вивести елементи масиву на екран (тобто в консоль) можна, наприклад, за допомогою циклу for. Ще один, коротший спосіб виведення масиву на екран буде розглянуто в пункті «Корисні методи для роботи з масивами» нижче. А поки що розглянемо приклад циклічного виведення масиву:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
В результаті програма виведе наступний результат:
Winter Spring Summer Autumn

Одновимірні та багатовимірні масиви в Java

А що, якщо ми захочемо створити не масив чисел, масив рядків чи масив якихось об'єктів, а масив масивів? Java дозволяє це зробити. Уже звичний масив int[] myArray = new int[8] – це так званий одновимірний масив. А масив масивів називається двовимірним. Він схожий на таблицю, яка має номери рядків і стовпців. Або, якщо ви вивчали основи лінійної алгебри, – на матрицю.Масиви в Java - 3Навіщо потрібні такі масиви? Зокрема, для програмування тих самих матриць і таблиць, а також об'єктів, що нагадують їх за структурою. Наприклад, ігрове поле для шахів можна задати масивом 8×8. Багатовимірний масив оголошується і створюється так:
Int[][] myTwoDimentionalArray = new int [8][8];
У цьому масиві рівно 64 елементи: myTwoDimentionalArray[0][0], myTwoDimentionalArray[0][1], myTwoDimentionalArray[1][0], myTwoDimentionalArray[1][1] і так далі до myTwoDimentionalArray[7][7]. Тож якщо ми з його допомогою представимо шахівницю, то клітинку A1 представлятиме myTwoDimentionalArray[0][0], а E2 – myTwoDimentionalArray[4][1]. Де два, там і три. У Java можна задати масив масивів, масивів масивів і так далі. Щоправда, тривимірні й багатовимірні масиви використовуються дуже рідко. Проте за допомогою тривимірного масиву можна запрограмувати, наприклад, кубик Рубіка.

Що ще почитати

Багатовимірні масиви

Корисні методи для роботи з масивами

Для роботи з масивами в Java є клас java.util.Arrays (arrays англійською і означає «масиви»). Загалом із масивами найчастіше виконують такі операції: заповнення елементами (ініціалізація), видалення елемента (за номером), сортування та пошук. Пошук і сортування масивів – окрема тема. З одного боку, дуже корисно потренуватися й написати кілька алгоритмів пошуку та сортування самостійно. З іншого боку, усі найкращі способи вже реалізовані та включені до бібліотек Java, і ними можна цілком законно користуватися.Ось три корисні методи цього класу.

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

Метод void sort(int[] myArray, int fromIndex, int toIndex) сортує масив цілих чисел або його підмасив за зростанням.

Пошук у масиві потрібного елемента

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key). Цей метод шукає елемент key у вже відсортованому масиві myArray або підмасиві в діапазоні від fromIndex до toIndex. Якщо елемент знайдено, метод повертає його індекс, якщо ні – (-fromIndex)-1.

Перетворення масиву на рядок

Метод String toString(int[] myArray) перетворює масив на рядок. Річ у тім, що масиви в Java не перевизначають метод toString(). Це означає, що якщо ви спробуєте вивести цілий масив (а не його елементи, як у пункті «Виведення масиву на екран») безпосередньо на екран (System.out.println(myArray)), ви отримаєте ім'я класу та шістнадцятковий хеш-код масиву (це визначено методом Object.toString()). Якщо ви новачок, це пояснення до методу toString може здатися незрозумілим. На першому етапі це й не потрібно, зате за допомогою цього методу значно спрощується виведення масиву. Java дозволяє легко вивести масив на екран без використання циклу. Це показано в прикладі нижче.

Приклад використання sort(), binarySearch() і toString()

Давайте створимо масив цілих чисел, виведемо його на екран за допомогою toString(), відсортуємо за допомогою методу sort() і знайдемо в ньому певне число за допомогою binarySearch().
class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; // оголошуємо та ініціалізуємо масив
        System.out.println(array); // намагаємося вивести наш масив на екран без методу toString() – отримуємо шістнадцятковий хеш-код
        System.out.println(Arrays.toString(array)); // виводимо масив "правильно"
        Arrays.sort(array, 0, 4); // сортуємо масив від нульового до четвертого елемента
        System.out.println(Arrays.toString(array)); // виводимо відсортований масив на екран
        int key = Arrays.binarySearch(array, 5); // шукаємо число 5 у відсортованому масиві
        // метод binarySearch() поверне індекс елемента відсортованого масиву, в якому міститься шукане число
        System.out.println(key); // виводимо індекс шуканого числа
        System.out.println(Arrays.binarySearch(array, 0)); // а тепер спробуємо знайти число, якого в масиві немає,
        // і відразу виведемо результат на екран
    }
}
Вивід програми:
[I@1540e19d [1, 5, 4, 3, 7] [1, 3, 4, 5, 7] 3 -1
У першому рядку – спроба виведення на екран масиву без toString(), у другому – виведення масиву за допомогою toString(), у третьому – відсортований масив, у четвертому – індекс шуканого числа 5 у відсортованому масиві (пам'ятайте, що рахуємо з нуля, тому четвертий елемент масиву має індекс 3). У п'ятому рядку бачимо значення -1. Такого індексу в масиві не буває. Це означає, що шуканого елемента (у цьому випадку – 0) у масиві немає.

Більше про методи класу Arrays

Клас Arrays та його використання – у статті описано деякі методи класу Arrays.

Головне про масиви

  • Основні властивості масиву: тип даних, що зберігаються в ньому, ім'я та довжина.
    Остання визначається під час ініціалізації (виділення пам'яті під масив), а перші два параметри – під час оголошення масиву.

  • Розмір масиву (кількість комірок) потрібно задавати як int.

  • Змінити довжину масиву після створення не можна.

  • Доступ до елемента масиву здійснюється за його індексом.

  • У масивах, як і всюди в Java, елементи нумеруються з нуля.

  • Після створення масив заповнений значеннями за замовчуванням.

  • Масиви в Java влаштовані не так, як у C++. Вони майже збігаються з покажчиками на динамічні масиви.

Корисні матеріали про масиви

Хочете дізнатися більше про масиви? Зверніть увагу на статті нижче. Там багато цікавого та корисного з цієї теми.
  1. Щось про масиви – хороша докладна стаття про масиви.

  2. Клас Arrays та його використання – у статті описано деякі методи класу Arrays.

  3. Багатовимірні масиви – докладна стаття про багатовимірні масиви з прикладами.