Повторное рассмотрение массивов

Массивы были представлены ранее до того, как мы рассмотрели классы. Теперь, имея представление о классах, можно сделать важный вывод относительно маесивов: все они реализованы как объекты. В связи с этим существует специальный атрибут массива, который наверняка пригодится. В частности, размер массива — т.е. количество элементов, которые может содержать массив — хранится в его переменной экземпляра length. Все массивы обладают этой переменной, которая всегда будет содержать размер массива. Ниже приведен пример программы, которая демонстрирует это свойство.

// Эта программа демонстрирует член длины массива.
class Length {
public static void main(String args[]) {
int al [ ] = new int[10];
int a2[] = {3, 5, 7, 1, 8, 99, 44, -10};
int a3[] = [4, 3, 2, l]; System.out.println ("длина al равна " + al.length);
System.out.println("длина a2 равна " + a2.length);
System.out.println("длина аЗ равна " .+ a3.length);
}
}

Эта программа генерирует следующий вывод:

длина al равна 10
длина а2 равна 8
длина аЗ равна 4

Как видите, программа отображает размер каждого массива. Имейте в виду, что значение переменной length никак не связано с количеством действительно используемых элементов. Оно отражает лишь то количество здементов, которое может содержать массив.

Член length может находить применение во множестве ситуаций. Например, ниже показана усовершенствованная версия класса Stack. Как вы, возможно, помните, предшествующие версии этого класса всегда создавали десятиэлементный стек. Следующая версия позволяет создавать стеки любого размера. Значение stck.length служит для предотвращения переполнения стека.

// Усовершенствованный класс Stack, в котором использован член длины массива.
class Stack {
private int stck lb-private int tos;
// распределение и инициализация стека Stack(int size) {
stck = new int[size];
tos = -1;
}
// Проталкивание элемента в стек
void push(int item) {
if(tos==stck.length-1)
// использование члена длины массива
System.out.println("Стек полон.");
else
stck[++tos] = item;
}
// Выталкивание элемента из стека
int pop () {
if(tos < 0) {
System.out.println ("Стек не загружен.");
return 0;
else
return stck[tos--];
class TestStack2 {
public static void main(String args[]) {
Stack mystackl = new Stack(5);
Stack mystack2 = new Stack(8);
// проталкивание чисел в стек
for(int i=0; i<5; i++)
mystackl.push(i);
for(int i=0; i<8; i++)
mystack2.push (i);
// выталкивание этих чисел из стека
System.out.println("Стек в mystackl:");
for(int i=0; i<5; i++)
System.out.println(mystackl.pop());
System.out.println ("Стек в mystack2:");v for(int i=0; i<8; i++)
System.out.println(mystack2.pop());}
}
}

Обратите внимание, что программа создает два стека: один глубиной в пять элементов, а второй — в шесть. Как видите, то, что массивы поддерживают информацию о своей длине, упрощает создание стеков любого размера.




Rambler's Top100