Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

понедельник, 4 мая 2009 г.

Массивы в Java - Часть 1 - Основы

Массивы являются самым эффективным средством хранения и произвольного доступа ссылок на объекты. Массив представляет собой простую линейную последовательность, благодаря чему время доступа к элементу массива постоянно (т.е. не зависит от размера массива) и равно О(1). За скорость приходится расплачиваться тем, что размер массива фиксируется во время создания и не может изменяться все время жизни массива. Коллекция java.util.ArrayList, часто используемая вместо массива, способна изменять свой размер во время выполнения, но она значительно уступает по эффективности массиву. Повторюсь и подчеркну, что реальным преимуществом массива перед коллекциями является его эффективность.

Размер массива записан в переменную length. Нумерация элементов массива начинается с нуля. Поэтому индекс последнего элемента равен length-1. И массивы, и коллекции защищены от выхода за границу диапазона. Если случается выход за границу массива, то генерируется исключение ArrayIndexOutOfBoundsException.
Его перехватывать нежелательно, так как это RuntimeException, и оно сигнализирует о том, что программа работает неверно.

Пример создания и использования массива:

int[] a = new int[5];
for (int i=0; i<a.length; i++)
System.out.println(a[i]);

В данном примере создается массив целых чисел, и его элементы выводятся на печать. При создании массива все его элементы инициализируются значением по умолчанию. Для примитивных числовых типов (int,long и т.д.) этим значением является 0 (ноль), для типа boolean значением по умолчанию является false, для ссылок значение по умолчанию - null.
Можно запомнить значения по умолчанию в следюущем виде: "0/false/null".

В следующем примере массив инициализируется сразу при создании:

int[] a = {
2,
5,
(int)Math.pow(4,8)
};

Инициализирующее выражение может быть любым, в том числе это может быть вызов метода.

Массив объектов содержит не сами объекты, а ссылки на них. По умолчанию ссылка инициализируется null-значением. См. следующий пример:

String[] a = new String[5];
for (int i=0; i<a.length; i++)
System.out.println(a[i]);
Как и следует ожидать, на печать будет выведен столбик из null-значений. Если попытаться обратиться к элементам массива сразу после создания, без инициализации, то будет выкинуто NullPointerException.

Другое дело, если после создания в массиве будут сохранены ссылки на объекты. См. пример:

String[] a = new String[5];
a[0] = "abc";
a[1] = "def";
a[2] = "ghi";
a[3] = "jkl";
a[4] = "mno";
for (int i=0; i<a.length; i++)
System.out.println(a[i]);

В этом случае на печать будет выведен столбик строковых значений.

В Java возможно создание массивов нулевой длины. Например:

String[] a = new String[0];
System.out.println(a.length);

Иногда это бывает полезно.

Комментариев нет:

Отправить комментарий

Постоянные читатели