動態改變內存
因為數組在存儲之前需要先申請一塊連續的內存空間並且在編譯的收就必須確定好它的空間大小,在運行時控件的大小無法再隨着需求的改變而改變,極易出現越界的情況,數據少時又會造成內存空間浪費。
主要一下幾種:
List結構集合類:(有序可重復)
ArrayList類 LinkedList類 Vector類 stack類
map結構集合類:鍵值對(鍵唯一,值不唯一)
HashMap類 Hashtable類
set結構集合類:無序不可重復
HashSet類 TreeSet類
HashMap和Hashtable的區別:
相同點:
兩者都屬於Java的集合類,可以用來存放Java對象
區別:
根源:Hashtable基於陳舊的Dictionary類,HashMap是Java1.2引進的Map接口的一個實現。
同步性:Hashtable是同步的,這個類中的一些方法保證了Hashtable中的對象是安全的 ,而HashMap是異步的,因此HashMap中的對象並不是線程安全的。因為同步的要求會影響執行的效率,所以當不要求線程安全的集合,HashMap是不錯的選擇,這樣可以避免由於同步帶來的不必要的性能開銷,從而能大大提高效率。
值:HashMap可以存放空值,key或者value可以為空;Hashtable是不能放入空值的(null)。
ArrayList和Vector的區別:
相同點:
ArrayList與Vector都屬於Java的集合類,可以用來存放Java對象
區別:
同步性:Vector是同步的,這個類中的一些方法保證了Vector中的對象是安全的 ,而ArrayList是異步的,因此ArrayList中的對象並不是線程安全的。因為同步的要求會影響執行的效率,所以當不要求線程安全的集合,ArrayList是不錯的選擇,這樣可以避免由於同步帶來的不必要的性能開銷,從而能大大提高效率。
數據增長:
ArrayList和Vector早內部實現機制上都是使用數組(Array)來空值集合中的對象。當添加元素的時候,如果元素的數目超出了內部數組目前的長度他們都需要擴展內部數組的長度,Vector在缺省情況下默認自動增長原來一倍的數組長度,而ArrayList是原來的50%。因此最終獲取的集合所占的控件總是比你實際需要的要打。所以如果你要在集合中保存大量數據時建議使用Vector,可以通過設置集合的初始化大小來避免不必要的資源開銷。
小結:
Java為我們提供了這些集合類,在后面編程中是相當有用的,具體什么時候用什么,需要根據分析集合的區別進行選取。
①線程安全用Vector、Hashtable
②非線程安全:ArrayList、LinkedList、HashMap
③鍵值對:HashMap、Hashtable
④數據量大且考慮線程安全:Vector