重新温习数组

发表于:2007-07-14来源:作者:点击数: 标签:
在此之前已经在本书中介绍过数组了。现在既然你已了解了类,可以介绍关于数组的重要的一点:数组是作为对象来实现的。因此,你可能想要利用数组的一种特别的属性,具体地说,就是一个数组的大

在此之前已经在本书中介绍过数组了。现在既然你已了解了类,可以介绍关于数组的重要的一点:数组是作为对象来实现的。因此,你可能想要利用数组的一种特别的属性,具体地说,就是一个数组的大小——也就是,一个数组能保存的元素的数目——可以在它的length 实例变量中找到。所有的数组都有这个变量,并且它总是保存数组的大小。下面的程序示例了这个性质:

// This program demonstrates the length array member.
class Length {

public static void main(String args[]) { int a1[] = new int[10];int a2[] = {3,5,7,1,8,99,44,-10};int a3[] = {4,3,2,1};

System.out.println("length of a1 is " + a1.length);
System.out.println("length of a2 is " + a2.length);
System.out.println("length of a3 is " + a3.length);

}
}

该程序显示如下输出:

length of a1 is 10
length of a2 is 8
length of a3 is 4

可以看出,每个数组的大小都被显示。要记住length 的值和数组实际使用的元素的个数没有关系。length 仅反映了数组能够包含的元素的数目。

在许多情况下,你可以好好利用length 。例如,下面的程序是Stack类的改进版本。你可能回忆起,该类的早期的版本总是要产生一个10个元素的堆栈。下面的版本可以让你产生任意长度的堆栈。stck.length 的值用来防止堆栈溢出。

// Improved Stack class that uses the length array member.

class Stack { private int stck[]; private int tos;

// allocate and initialize stack

Stack(int size) {
stck = new int[size];
tos = -1;

}

// Push an item onto the stack void push(int item) {if(tos==stck.length-1) // use length member System.out.println("Stack is full.");
else
stck[++tos] = item;
}

// Pop an item from the stack int pop() {

if(tos < 0) { System.out.println("Stack underflow."); return 0;

}
else
return stck[tos--];
}
}

class TestStack2 {

public static void main(String args[]) {
Stack mystack1 = new Stack(5);
Stack mystack2 = new Stack(8);
// push some numbers onto the stack
for(int i=0; i<5; i++) mystack1.push(i);
for(int i=0; i<8; i++) mystack2.push(i);

// pop those numbers off the stack
System.out.println("Stack in mystack1:");
for(int i=0; i<5; i++)

System.out.println(mystack1.pop());

System.out.println("Stack in mystack2:");
for(int i=0; i<8; i++)
System.out.println(mystack2.pop());
}
}

注意,该程序创建了两个堆栈:一个有5个元素,另一个有8个元素。可以看出,数组保持它们自己长度信息的事实使创建任何大小的堆栈很容易。

原文转自:http://www.ltesting.net