java核心技術卷I-泛型數組列表

泛型數組列表

Java 中另外一個被稱爲ArrayList 的類。它使用起來有點像數組,但在添加或刪除元素時, 具有自動調節數組容量的功能,而不需要爲此編寫任何代碼。
ArrayList 是一個採用類型參數( type parameter ) 的泛型類( generic class)。爲了指定數組列表保存的元素對象類型,需要用一對尖括號將類名括起來加在後面, 例如,ArrayList。

ArrayList<Employee> staff = new ArrayList<Employee>();

兩邊都使用類型參數 Employee, 這有些繁瑣。Java SE 7中, 可以省去右邊的類型參數。
這被稱爲“ 菱形” 語法,因爲空尖括號 <>就像是一個菱形。可以結合 new 操作符使用菱形語法。編譯器會檢查新值是什麼。如果賦值給一個變量,或傳遞到某個方法,或者從某個方法返回,編譯器會檢査這個變量、 參數或方法的泛型類型,然後將這個類型放在<>中。在這個例子中,new ArrayListo()將賦至一個類型爲 ArrayList 的變量, 所以泛型類型爲 Employee。

在 Java 的老版本中, 程序員使用 Vector 類實現動態數組。 不過, ArrayList 類更加有效,沒有任何理由一定要使用 Vector 類

如果調用 add 且內部數組已經滿了,數組列表就將自動地創建一個更大的數組,並將所有的對象從較小的數組中拷貝到較大的數組中。
如果已經清楚或能夠估計出數組可能存儲的元素數量, 就可以在填充數組之前調用ensureCapacity方法

staff.ensureCapacity(100);

這個方法調用將分配一個包含 100 個對象的內部數組。然後調用 100 次 add, 而不用重新分配空間。
另外,還可以把初始容量傳遞給 ArrayList 構造器:

ArrayList<Employee> staff = new ArrayList<>(100);

數組列表的容量與數組的大小有一個非常重要的區別。如果爲數組分配 100 個元素的存儲空間,數組就有 100 個空位置可以使用。 而容量爲 100 個元素的數組列表只是擁有保存 100 個元素的潛力 ( 實際上, 重新分配空間的話,將會超過丨00 ), 但是在最初,甚至完成初始化構造之後,數組列表根本就不含有任何元素。

size方法將返回數組列表中包含的實際元素數目

staff.size()

一旦能夠確認數組列表的大小不再發生變化,就可以調用 trimToSize方法。這個方法將存儲區域的大小調整爲當前元素數量所需要的存儲空間數目。垃圾回收器將回收多餘的存儲空間。
一旦整理了數組列表的大小,添加新元素就需要花時間再次移動存儲塊,所以應該在確認不會添加任何元素時, 再調用 trimToSize。

數組列表和數組不同點:
1.不必指出數組的大小
2.使用 add 將任意多的元素添加到數組中
3.使用 size() 替代 length 計算元素的數目
4.使用 a.get(i) 替代 a[i] 訪問元素

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章