Що таке масив?
Масив – це структура даних, у якій зберігаються елементи одного типу. Його можна уявити, як набір пронумерованих осередків, у кожну з яких можна помістити якісь дані (один елемент даних в одну комірку). Доступ до конкретного осередку здійснюється через її номер. Номер елемента в масиві також називають індексом . У випадку з Java масив однорідний, тобто у всіх його осередках зберігатимуться елементи одного типу. Так, масив цілих чисел містить лише цілі числа (наприклад, типу int ), масив рядків — лише рядки, масив із елементів створеного нами класу Dog міститиме лише об'єкти Dog . Тобто в Java ми не можемо помістити в перший осередок масиву ціле число, в другу String, а третю - "собаку".Оголошення масиву
Як оголосити масив?
Як і будь-яку змінну, масив Java потрібно оголосити. Зробити це можна одним із двох способів. Вони рівноправні, але перший їх краще відповідає стилю Java. Друга ж — спадщина мови Сі (багато Сі-програмістів переходабо на Java, і для їх зручності був залишений і альтернативний спосіб). У таблиці наведено обидва способи оголошення масиву Java:№ | Оголошення масиву, Java-синтаксис | Приклади | Коментар |
---|---|---|---|
1. |
|
|
Бажано оголошувати масив саме таким способом, це Java-стиль |
2. |
|
|
Успадкований від С/С++ спосіб оголошення масивів, який працює і Java |
Створення масиву
Як створити масив?
Як і будь-який інший об'єкт створити масив 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, для boolean — false , для посилальних типів — null . Таким чином після операції
int[] myArray = new int[10];
ми отримуємо масив із десяти цілих чисел, і, поки це не зміниться в ході програми, у кожному осередку записано 0.
Більше інформації про масиви є у статті " Дещо про масиви " |
Довжина масиву в Java
Як ми вже говорабо вище, довжина масиву - це кількість елементів, під яку розрахований масив. Довжину масиву не можна змінити після створення. Зверніть увагу:Java елементи масиву нумеруються з нуля. Тобто, якщо ми маємо масив на 10 елементів, то перший елемент масиву матиме індекс 0, а останній — 9. Отримати доступ до довжини масиву можна за допомогою змінної length . Приклад:int[] myArray = new int[10]; // створабо масив цілих чисел на 10 елементів і надали йому ім'я myArray
System.out.println(myArray.length); // вивели в консоль довжину масиву, тобто кількість елементів, які ми можемо помістити в масив
Висновок програми:
Ініціалізація масиву та доступ до його елементів
Як створити масив 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]);
}
В результаті програма виведе наступний результат:
Одномірні та багатовимірні Java масиви
А якщо ми захочемо створити не масив чисел, масив рядків чи масив якихось об'єктів, а масив масивів? Java дозволяє це зробити. Вже звичний масив int[] myArray = new int[8] — так званий одновимірний масив. А масив масивів називається двовимірним. Він схожий на таблицю, яка має номер рядка і номер стовпця. Або, якщо ви вчабо початки лінійної алгебри, — на матрицю. Навіщо потрібні такі масиви? Зокрема, для програмування тих самих матриць та таблиць, а також об'єктів, що нагадують їх за структурою. Наприклад, ігрове поле для шахів можна задати масивом 8х8. Багатовимірний масив оголошується і створюється так:Int[][] myTwoDimentionalArray = new int [8][8];
У цьому масиві рівно 64 елементи: myTwoDimentionalArray[0][0]
, myTwoDimentionalArray[0][1]
, myTwoDimentionalArray[1][0]
, myTwoDimentionalArray[1][1]
і так далі до myTwoDimentionalArray[7][7]
. Тож якщо ми з його допомогою представимо шахівницю, то клітину А1 представлятиме myTwoDimentionalArray[0][0]
, а E2 — myTwoDimentionalArray[4][1]
. Десь два, там і три. У Java можна задати масив масивів масивів масивів і так далі. Щоправда, тривимірні і масивні використовуються дуже рідко. Проте за допомогою тривимірного масиву можна запрограмувати, наприклад, кубик Рубіка.
Що ще почитати |
---|
Корисні методи для роботи з масивами
Для роботи з масивами Java є клас java.util.Arrays (arrays англійською і означає "масиви"). У цілому з масивами найчастіше роблять такі операції: заповнення елементами (ініціалізація), вилучення елемента (за номером), сортування та пошук. Пошук та сортування масивів – тема окрема. З одного боку дуже корисно потренуватися та написати кілька алгоритмів пошуку та сортування самостійно. З іншого боку, всі найкращі способи вже написані та включені до бібліотек Java, і ними можна законно користуватися.
Статті на пошук та сортування: Алгоритми сортування в теорії та на практиці Реалізація бульбашкового сортування на Java Сортування та пошук у курсі CS50: Алгоритми сортування. Пухирцеве сортування |
Сортування масиву
Методvoid sort(int[] myArray, int fromIndex, int toIndex)
сортує масив цілих чисел чи його підмасив за зростанням.
Пошук у масиві потрібного елемента
int binarySearch(int[] myArray, int fromIndex, int toIndex, int key)
. Цей метод шукає елемент key у вже відсортованому масиві myArray або підмасиві, починаючи зIndex і доIndex . Якщо елемент знайдено, метод повертає його індекс, якщо ні - (-fromIndex)-1
.
Перетворення масиву до рядка
МетодString toString(int[] myArray)
перетворює масив до рядка. Справа в тому, що Java масиви не перевизначають toString() . Це означає, що якщо ви спробуєте вивести цілий масив (а не за елементами, як у пункті “ Виведення масиву на екран ”) на екран безпосередньо ( System.out.println(myArray)
), ви отримаєте ім'я класу та шістнадцятковий хеш-код масиву (це визначено Object.toString() ). Якщо ви новачок, вам, можливо, незрозуміле пояснення до методу toString
. На першому етапі це й не потрібно, натомість за допомогою цього методу спрощується виведення масиву. Java дозволяє легко виводити масив на екран без використання циклу. Про це у прикладі нижче.
Приклад на sort, binarySearch і toString
Давайте створимо масив цілих чисел, виведемо його на екран за допомогою toString , відсортуємо за допомогою методу sort і знайдемо в ньому якесь число.class Main {
public static void main(String[] args) {
int[] array = {1, 5, 4, 3, 7}; //оголошуємо та ініціалізуємо масив
System.out.println(array);//намагаємося вивести наш масив на екран без методу toString - отримуємо 16-річне число
System.out.println(Arrays.toString(array));//печатаем массив "правильно"
Arrays.sort(array, 0, 4); //сортуємо весь масив від нульового до четвертого члена
System.out.println(Arrays.toString(array));//Виводимо відсортований масив на екран
int key = Arrays.binarySearch(array, 5); // ищем key - число 5 в отсортированном массиве.
//метод binarySearch видасть індекс елемента остортованого масиву, в якому "заховано" число, яке шукає
System.out.println(key);//распечатываем индекс искомого числа
System.out.println(Arrays.binarySearch(array, 0));//а теперь попробуем найти число, которого в массиве нет,
// і відразу виведемо результат на екран
}
}
Висновок програми:
Більше про методи класу Array Клас Arrays та його використання - у статті описані деякі методи класу Array |
Головне про масиви
-
Основні властивості масиву: тип поміщених у нього даних, ім'я та довжина.
Останнє вирішується при ініціалізації (виділенні пам'яті під масив), перші два параметри визначаються при оголошенні масиву. -
Розмір масиву (кількість осередків) потрібно визначати в int
-
Змінити довжину масиву після створення не можна.
-
Доступ до елемента масиву можна отримати за його індексом.
-
У масивах, як і скрізь Java, елементи нумеруються з нуля.
-
Після процедури створення масиву він заповнений значеннями за замовчуванням.
-
Масиви у мові Java влаштовані негаразд, як і C++. Вони майже збігаються із покажчиками на динамічні масиви.
Корисні матеріали про масиви
Хочете знати більше про масиви? Зверніть увагу на статті нижче. Там багато цікавого та корисного з цієї теми.-
Щось про масиви — хороша докладна стаття про масиви
-
Клас Arrays та його використання - у статті описані деякі методи класу Array
-
Багатомірні масиви - докладна стаття про багатовимірні масиви з прикладами.
-
Повертайте масив нульової довжини, а не null - автор "Ефективного програмування" Джошуа Блох розповідає про те, як краще повертати порожні масиви
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ