1. 程式人生 > >Java的陣列(Array)、Vector、ArrayList、HashMap的異同

Java的陣列(Array)、Vector、ArrayList、HashMap的異同

array(陣列)和Vector是十分相似的Java構件(constructs),兩者全然不同,在選擇使用時應根據各自的功能來確定。


1、陣列:Java arrays的元素個數不能下標越界,從很大程度上保證了Java程式的安全性,而其他一些語言出現這一問題時常導致災難性的後果。
        Array可以存放Object和基本資料型別,但建立時必須指定陣列的大小,並不能再改變。值得注意的是:當Array中的某一元素存放的是Objrct reference 時,Java不會呼叫預設的建構函式,而是將其初值設為null,當然這跟Java對各型別資料賦預設值的規則是一樣的,對基本資料型別同樣適用。


2、Vector:對比於Array,當更多的元素被加入進來以至超出其容量時,Vector的size會動態增長,而Array容量是定死的。同時,Vector在刪除一些元素後,其所有下標大於被刪除元素的元素都依次前移,並獲得新下標比原來的小了)。注意:當呼叫Vector的size()方法時,返回Vector中實際元素的個數。
     Vector內部實際是以Array實現的,也通過元素的整數索引來訪問元素,但它只能存放java.lang.Object物件,不能用於存放基本型別資料,比如要存放一個整數10,得用new Integer(10)構造出一個Integer包裝類物件再放進去。當Vector中的元素個數發生變化時, 其內部的Array必須重新分配並進行拷貝,因此這是一點值得考慮的效率問題。
     Vetor同時也實現了List介面,所以也可以算作Colletion了,只是它還特殊在:Vector is synchronized。即Vetor物件自身實現了同步機制。

3、ArrayList:實現了List介面,功能與Vetor一樣,只是沒有同步機制,當然元素的訪問方式為從List中繼承而來,可存放任何型別的物件。

4、HashMap:繼承了Map介面,實現用Keys來儲存和訪問Values,Keys和Values都可以為空,它與Hashtable類的區別在於Hashtable類的Keys不能為null,並Hashtable類有同步機制控制,而HashMap類沒有。
      在Struts類庫中實現了一個LableValueBean,用Lable(Key)來儲存和訪問Value,很方便。