Массивы
Массив — это структура данных, в которой хранятся величины
одинакового типа. Доступ к отдельному элементу массива осуществляется с
помощью целого индекса. Например, если а — массив целых чисел, то
значение выражения а [ 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 нет арифметики указателей — нельзя
увеличить указатель а, чтобы обратиться к следующему элементу массива.
|