Вы здесь: Главная >> Java-учебник >> Java массивы в Java
Java массивы
Массив — это структура данных, в которой хранятся величины одинакового типа. Доступ к отдельному элементу массива осуществляется с помощью целого индекса. Например, если а — массив целых чисел, то значение выражения а [ i ] равно i-му целому числу в массиве.
Массив объявляется следующим образом: сначала указывается тип массива, т.е тип элементов, содержащихся в массиве, за которым ставится пара пустых квадратных скобок, а затем — имя переменной. Например, вот как объявляется массив, состоящий из целых чисел:
int[] a;
Однако этот оператор лишь объявляет переменную а, не инициализируя ее настоящим массивом. Чтобы создать массив, нужно применить оператор new.
int[ ] a = new int [100] ;
Этот оператор создает массив, состоящий из 100 целых чисел. Элементы этого массива нумеруются от 0 до 99 (а не от 1 до 100). После создания массив можно заполнять, например, с помощью цикла.
int [ ] а = new int[100];
for (int i = 0; i < 100; i++)
a[i] = i; // Заполняет массив числами от 0 до 99.
Если вы попытаетесь обратиться к элементу а [100] (или любому другому элементу, индекс которого выходит за пределы диапазона от 0 до 99), создав массив, состоящий из 100 элементов, программа прекратит работу, поскольку возникнет исключительная ситуация, связанная с выходом индекса массива за пределы допустимого диапазона.
Чтобы подсчитать количество элементов в массиве, используйте метод имяМасси-
ва.length.
Например,
for (int i = 0; i < a. length; i++ System.out.println (a[i]);
После создания массива изменить его размер невозможно (хотя можно, конечно, изменять отдельные его элементы). Если в ходе выполнения программы необходимо часто изменять размер массива, лучше использовать другую структуру данных, называемую списком массивов (array list).
Массив можно объявить двумя способами:
int[ ] a;
или
int a[ ];
Большинство программистов на языке Java предпочитают первый стиль, поскольку в нем четче отделяется тип массива int [ ] (целочисленный массив) от имени переменной.
Инициализаторы массивов и безымянные массивы
В языке Java есть средство для одновременного создания массива и его инициализации. Вот пример такой синтаксической конструкции:
int[] smallPrimes = { 2, 3, 5, 7, 11, 13};
Отметим, что в этом случае не нужно применять оператор new. Кроме того, можно даже инициализировать безымянный массив:
new int [ ] { 16, 19, 23 , 29 , 31, 37}
Это выражение выделяет память для нового массива и заполняет его числами, указанными в фигурных скобках. При этом подсчитывается их количество и, соответственно, определяется размер массива. Эту синтаксическую конструкцию удобно применять для повторной инициализации массива без образования новой переменной. Например, выражение
smallPrimes = new int{ 17, 19, 23, 29, 31, 37 };
представляет собой укороченную запись выражения
int[] anonymous = { 17, 19, 23, 29, 31, 37 };
smailPrimes = anonymous;
Можно создать массив нулевого размера. Такой массив может оказаться полезным при написании метода, вычисляющего некий массив, который оказывается пустым. Массив нулевой длины объявляется следующим образом:
new типЭлементов[]
Заметим, что такой массив не эквивалентен объекту null.
Копирование массивов
Один массив можно скопировать в другой, но при этом обе переменные будут ссылаться на один и тот же массив.
int[] luckyNumbers = smailPrimes;
luckyNuimbers[5] = 12; // Теперь элемент smailPrimes[5]также равен 12.
Результат показан на рис. 3.14. Если необходимо скопировать все элементы одного массива в другой, следует использовать метод arraycopy из класса System. Его вызов выглядит следующим образом:
System.arraycopy(from, fromlndex, to, tolndex, count);
Массив to должен иметь достаточный размер, чтобы в нем поместились все копируемые элементы.
Рис. 3.14. Копирование массива
Например, показанные ниже операторы, результаты работы которых изображены на рис. 3.15, создают два массива, а затем копируют последние четыре элемента первого массива во второй. Копирование начинается со второй позиции в исходном массиве, а копируемые элементы помещаются в целевой массив, начиная с третьей позиции.
int[] smailPrimes = {2, 3, 5, 7, 11, 13};
int[] luckyNumbers = {1001, 1002, 1003, 1004, 1005, 1006, 1007};
System.аггаусору(smailPrimes, 2, luckyNumbers, 3, 4);
for (int i = 0; i < luckyNumbers.length; i++)
System.println(i +.": " + luckyNumbersfi]);
Выполнение этих операторов приводит к следующему результату.
0: 1001
1: 1002
2: 1003
3: 5
4: 7
5: 11
6: 13
Рис. 3.15. Копирование элементов массива
Массив в языке Java значительно отличается от массива в языке C++. Однако он практически совпадает с указателем на динамический массив. Это значит, что оператор
int[] a = new int[100]; //Java
эквивалентен оператору
i n t * = new i n t [ 1 0 0 ] ; // C++,
а не
int a[100]; // C++
В языке Java оператор [ ] no умолчанию проверяет диапазон изменения индексов. Кроме того, в языке Java нет арифметики указателей — нельзя увеличить указатель а, чтобы обратиться к следующему элементу массива.
Сергей Владимирцев
14.02.2011