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,很方便。