小又會變小。 在前面的例子中,使用由toString( )方法提供的預設的轉換顯示類集的內容,toString( ) 方法是從AbstractCollection繼承下來的。儘管它對簡短的例子程式來說是足夠了,然而很少 使用這種方法去顯示實際中的類集的內容。通常編程者會提供自己的輸出程式。但在下面 的幾個例子中,仍將採用由toString( )方法建立的預設輸出。 儘管當對象被儲存在ArrayList對象中時,其容量會自動增加。仍可以通過調用 ensureCapacity( )方法來人工地增加ArrayList的容量。如果事Crowdsourced Security Testing道將在當前能夠容納的類 集中儲存許許多多的項時,你可能會想這樣做。在開始時,通過一次性地增加它的容量, 就能避免後面的再分配。因為再分配是很花時間的,避免不必要的處理可以改善效能。 ensureCapacity( )方法的特徵如下所示: void ensureCapacity(int cap) 這裡,cap是新的容量。 相反地,如果想要減小在ArrayList對象之下的數組的大小,以便它有正好容納當前項 的大小,可以調用trimToSize( )方法。該方法說明如下: void trimToSize( ) 從數組列表(ArrayList)獲得數組(Array) 當使用ArrayList時,有時想要獲得一個實際的數組,這個數組包含了列表的內容。正 如前面解釋的那樣,可以通過調用方法toArray( )來實現它。下面是幾個為什麼可能想將類 集轉換成為數組的原因: ? 對於特定的操作,可以獲得更快的處理時間。 ? 為了給方法傳遞數組,而方法不必重載去接收類集。 ? 為了將新的基於類集的程式與不認識類集的老程式整合。 無論何種原因,如下面的例子程式所示,將ArrayList轉換成數組是一件繁瑣的事情。 // Convert an ArrayList into an array. import java.util.*; class ArrayListToArray { public static void main(String args[]) { // Create an array list ArrayList al = new ArrayList(); // Add elements to the array list al.add(new Integer(1)); al.add(new Integer(2)); al.add(new Integer(3)); al.add(new Integer(4)); System.out.println("Contents of al: " + al); // get arrayObject ia[] = al.toArray(); int sum = 0; // sum the array for(int i=0; i<ia.length; i++) sum += ((Integer) ia[i]).intValue(); System.out.println("Sum is: " + sum); } } 該程式的輸出如下所示: Contents of al: [1, 2, 3, 4] Sum is: 10 程式開始時建立一個整數的類集。正如上面做出的解釋那樣,由於不能將原始類型存 儲在類集中,因此類型Integer的對象被建立並被儲存。接下來,toArray( )方法被調用,它 獲得了一個Objects數組。這個數組的內容被置為整型(Integer),接下來對這些值進行求 和。 15.3.2 LinkedList類 LinkedList類擴充AbstractSequentialList並執行List介面。它提供了一個連結清單資料結 構。它具有如下的兩個建構函式,說明如下: LinkedList( ) LinkedList(Collection c) 第一個建構函式建立一個空的連結清單。第二個建構函式建立一個連結清單,該連結 列表由類集c中的元素初始化。 除了它繼承的方法之外,LinkedList類本身還定義了一些有用的方法,這些方法主要用 於操作和訪問列表。使用addFirst( )方法可以在列表頭增加元素;使用addLast( )方法可以在 列表的尾部增加元素。它們的形式如下所示: void addFirst(Object obj) void addLast(Object obj) 這裡,obj是被增加的項。 調用getFirst( )方法可以獲得第一個元素。調用getLast( )方法可以得到最後一個元素。 它們的形式如下所示: Object getFirst( ) Object getLast( ) 為了刪除第一個元素,可以使用removeFirst( )方法;為了刪除最後一個元素,可以調 用removeLast( )方法。它們的形式如下所示: Object removeFirst( ) Object removeLast( ) 下面的程式舉例說明了幾個LinkedList支援的方法。 // Demonstrate LinkedList. import java.util.*; class LinkedListDemo { public static void main(String args[]) { // create a linked list LinkedList ll = new LinkedList(); // add elements to the linked list ll.add("F"); ll.add("B"); ll.add("D"); ll.add("E"); ll.add("C"); ll.addLast("Z"); ll.addFirst("A"); ll.add(1, "A2"); System.out.println("Original contents of ll: " + ll); // remove elements from the linked list ll.remove("F"); ll.remove(2); System.out.println("Contents of ll after deletion: " + ll); // remove first and last elements ll.removeFirst(); ll.removeLast(); System.out.println("ll after deleting first and last: " + ll); // get and set a value Object val = ll.get(2); ll.set(2, (String) val + " Changed"); System.out.println("ll after change: " + ll); } } 該程式的輸出如下所示: Original contents of ll: [A, A2, F, B, D, E, C, Z] Contents of ll after deletion: [A, A2, D, E, C, Z] ll after deleting first and last: [A2, D, E, C] ll after change: [A2, D, E Changed, C] 因為LinkedList實現List介面,調用add(Object)將項目追加到列表的尾部,如同addLast( ) 方法所做的那樣。使用add( )方法的add(int, Object)形式,插入項目到指定的位置,如例子 程式中調用add(1,“A2”)的舉例。 注意如何通過調用get( )和set( )方法而使得ll中的第三個元素髮生了改變。為了獲得一 個元素的當前值,通過get( )方法傳遞儲存該元素的下標值。為了對這個下標位置賦一個新 值,通過set( )方法傳遞下標和對應的新值。 |