重新溫習陣列(轉)

ba發表於2007-08-15
重新溫習陣列(轉)[@more@]在此之前已經在本書中介紹過陣列了。現在既然你已瞭解了類,可以介紹關於陣列的重要的一點:陣列是作為物件來實現的。因此,你可能想要利用陣列的一種特別的屬性,具體地說,就是一個陣列的大小——也就是,一個陣列能儲存的元素的數目——可以在它的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個元素。可以看出,陣列保持它們自己長度資訊的事實使建立任何大小的堆疊很容易。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-957972/,如需轉載,請註明出處,否則將追究法律責任。

相關文章