Java предоставляет возможность работы со структурами в виде массивов(Arrays).
Массив может содержать последовательность элементов определённого типа и фиксированного размера. Массив может использоваться как контейнер для хранения данных, но чаще его используют для объедения в группу переменных одного типа близких по смыслу.
Например вместо того что бы объявлять множество переменных одного типа: number0, number1, …, и number99, проще объявить переменную типа array и получать доступ к необходимому значению через индекс: numbers[0], numbers[1], и …, numbers[99].
Объявление массива
Для использования массива в программе, для начала необходимо объявить переменную и его тип.
Синтаксис
1 2 3 |
dataType[] arrayRefVar; // рекомендуется или dataType arrayRefVar[]; // работает но НЕ рекомендуется |
Заметка: dataType[] arrayRefVar — рекомендуется к использованию. Стиль записи dataType arrayRefVar[] — пришёл в Java из C/C++, для того что бы тем кто раньше писал на С/С++ было проще адаптироваться.
Создание массива
Массив можно создать при помощи оператора new, как на примере далее:
1 |
arrayRefVar = new dataType[arraySize]; |
Вышеприведённый код выполняет два действия:
- Создает массив, используя new dataType[arraySize];
- Ссылка на недавно созданный массив присваивается переменной arrayRefVar.
Объявление, создание и присвоение массива переменной может быть выполнено в одной операции:
1 |
dataType[] arrayRefVar = new dataType[arraySize]; |
Альтернативный вариант:
1 |
dataType[] arrayRefVar = {value0, value1, ..., valuek}; |
Доступ к элементам массива осуществляется через индекс. Индексация элементов массива начинается с 0,
Пример
Следующее выражение объявляет переменную myList массива и создаёт массив из 10 элементов типа double:
1 |
double[] myList = new double[10]; |
Графическое изображение массива:
Использование массивов
Для работы с массивами чаще всего используются циклы for или foreach, потому что тип элементов и размер массива заранее известны.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; // Print all the array elements for (int i = 0; i < myList.length; i++) { System.out.println(myList[i] + " "); } // Summing all elements double total = 0; for (int i = 0; i < myList.length; i++) { total += myList[i]; } System.out.println("Total is " + total); // Finding the largest element double max = myList[0]; for (int i = 1; i < myList.length; i++) { if (myList[i] > max) max = myList[i]; } System.out.println("Max is " + max); } } |
Результат выполнения:
1 2 3 4 5 6 |
1.9 2.9 3.4 3.5 Total is 11.7 Max is 3.5 |
Цикл foreach
Впервые в JDK 1.5 был добавлен цикл foreach, для более удобного обхода массива без использования индексов.
Пример:
1 2 3 4 5 6 7 8 9 10 11 |
public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; // Print all the array elements for (double element: myList) { System.out.println(element); } } } |
Результат выполнения:
1 2 3 4 |
1.9 2.9 3.4 3.5 |
Передача массива в метод
Так же как в качестве аргументов в методы можно передать приметивные типы, так можно передать и массив.
Пример:
1 2 3 4 5 |
public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } |
Например метод можно вызвать так:
1 |
printArray(new int[]{3, 1, 2, 6, 4, 2}); |
Возврат массива из метода
Методы могут возвращать массив.
Пример:
1 2 3 4 5 6 7 8 |
public static int[] reverse(int[] list) { int[] result = new int[list.length]; for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; } return result; } |