1. 程式人生 > 其它 >開課吧Java課堂:什麼是ArrayList類

開課吧Java課堂:什麼是ArrayList類

技術標籤:Java基礎pythonjava程式語言

ArrayList類擴充套件AbstractList並執行List介面。ArrayList支援可隨需要而增長的動態陣列。在Java中,標準陣列是定長的。在陣列建立之後,它們不能被加長或縮短,這也就意味著你必須事先知道陣列可以容納多少元素。

但是,你直到執行時才能知道需要多大的陣列。為了解決這個問題,類集框架定義了ArrayList。本質上,ArrayList是物件引用的一個變長陣列。也就是說,ArrayList能夠動態地增加或減小其大小。陣列列表以一個原始大小被建立。當超過了它的大小,類集自動增大。當物件被刪除後,陣列就可以縮小。

注意:動態陣列也被從以前版本遺留下來的類Vector所支援。關於這一點,將在章後面介紹。ArrayList有如下的建構函式:

ArrayList( ) 
ArrayList(Collection c) 
ArrayList(int capacity) 

其中第一個建構函式建立一個空的陣列列表。第二個建構函式建立一個數組列表,該陣列列表由類集c中的元素初始化。第三個建構函式建立一個數組列表,該陣列有指定的初始容量(capacity)。容量是用於儲存元素的基本陣列的大小。當元素被追加到陣列列表上時,容量會自動增加。

下面的程式展示了ArrayList的一個簡單應用。首先建立一個數組列表,接著新增型別String的物件(回想一個引用字串被轉化成一個字串(String)物件)。接著列表被顯示出來。將其中的一些元素刪除後,再一次顯示列表。

// Demonstrate ArrayList. 
import java.util.*; 
class ArrayListDemo { 
 public static void main(String args[]) { 
 // create an array list 
 ArrayList al = new ArrayList(); 
 
 System.out.println("Initial size of al: " + 
 al.size()); 
 // add elements to the array list 
 al.add("C");
al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); al.add(1, "A2"); System.out.println("Size of al after additions: " + al.size()); // display the array list System.out.println("Contents of al: " + al); // Remove elements from the array list al.remove("F"); al.remove(2); System.out.println("Size of al after deletions: " + al.size()); System.out.println("Contents of al: " + al); } }

該程式的輸出如下所示:

Initial size of al: 0 
Size of al after additions: 7 
Contents of al: [C, A2, A, E, B, D, F] 
Size of al after deletions: 5 
Contents of al: [C, A2, E, B, D] 

注意a1開始時是空的,當新增元素後,它的大小增加了。當有元素被刪除後,它的大小又會變小。

在前面的例子中,使用由toString( )方法提供的預設的轉換顯示類集的內容,toString( )方法是從AbstractCollection繼承下來的。儘管它對簡短的例子程式來說是足夠了,然而很少使用這種方法去顯示實際中的類集的內容。通常程式設計者會提供自己的輸出程式。但在下面的幾個例子中,仍將採用由toString( )方法建立的預設輸出。

儘管當物件被儲存在ArrayList物件中時,其容量會自動增加。

仍可以通過呼叫ensureCapacity( )方法來人工地增加ArrayList的容量。如果事先知道將在當前能夠容納的類集中儲存許許多多的項時,你可能會想這樣做。在開始時,通過一次性地增加它的容量,就能避免後面的再分配。因為再分配是很花時間的,避免不必要的處理可以改善效能。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 array 
 Object 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),接下來對這些值進行求和。