黑馬程序猿——JAVA基礎——集合
ArrayList和Vector功能類似。
Vector從Java 1.0起就存在,ArrayList從Java 1.2起才存在,較新。
所以Vector在JavaME、Card等各種微小版本號都能夠使用,而ArrayList不能
ArrayList不具備線程同步的安全性,但速度較快。
Vector具備線程安全。
而對於hashmap和hashtable
Hashtable和HashMap類有三個重要的不同之處。第一個不同主要是歷史原因。Hashtable是基於陳舊的Dictionary類的。HashMap是Java 1.2引進的Map接口的一個實現。
或許最重要的不同是Hashtable的方法是同步的。而HashMap的方法不是。這就意味著。盡管你能夠不用採取不論什麽特殊的行為就能夠在一個多線程的應用程序中用一個Hashtable,但你必須相同地為一個HashMap提供外同步。一個方便的方法就是利用Collections類的靜態的synchronizedMap()方法,它創建一個線程安全的Map對象,並把它作為一個封裝的對象來返回。這個對象的方法能夠讓你同步訪問潛在的HashMap。這麽做的結果就是當你不須要同步時,你不能切斷Hashtable中的同步(比方在一個單線程的應用程序中),並且同步添加了非常多處理費用。
第三點不同是,僅僅有HashMap能夠讓你將空值作為一個表的條目的key或value。HashMap中僅僅有一條記錄能夠是一個空的key,但隨意數量的條目能夠是空的value。這就是說,假設在表中沒有發現搜索鍵,或者假設發現了搜索鍵,但它是一個空的值,那麽get()將返回null。
假設有必要,用containKey()方法來差別這兩種情況。
一些資料建議。當須要同步時,用Hashtable,反之用HashMap。可是,由於在須要時,HashMap能夠被同步,HashMap的功能比Hashtable的功能很多其它,並且它不是基於一個陳舊的類的,所以有人覺得,在各種情況下,HashMap都優先於Hashtable。
二、對於java集合框架
他們之間的比較:
是否有序 | 是否同意元素反復 | ||
Collection | 否 | 是 | |
List | 是 | 是 | |
Set | AbstractSet | 否 | 否 |
HashSet | |||
TreeSet | 是(用二叉排序樹) | ||
Map | AbstractMap | 否 | 使用key-value來映射和存儲數據。key必須唯一,value能夠反復 |
HashMap | |||
TreeMap | 是(用二叉排序樹) |
、
黑馬程序猿——JAVA基礎——集合