①繼承不一樣。數組
public class Hashtable extends Dictionary implements Map安全
public class HashMap extends AbstractMap implements Map數據結構
②多線程
Hashtable 中的方法是同步的,而HashMap中的方法在缺省狀況下是非同步的。在多線程併發的環境下,能夠直接使用Hashtable,可是要使用HashMap的話就要本身增長同步處理了。併發
③spa
Hashtable中,key和value都不容許出現null值。線程
在HashMap中,null能夠做爲鍵,這樣的鍵只有一個;能夠有一個或多個鍵所對應的值爲null。當get()方法返回null值時,便可以表示 HashMap中沒有該鍵,也能夠表示該鍵所對應的值爲null。所以,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。指針
④兩個遍歷方式的內部實現上不一樣。對象
Hashtable、HashMap都使用了 Iterator。而因爲歷史緣由,Hashtable還使用了Enumeration的方式 。繼承
⑤
哈希值的使用不一樣,HashTable直接使用對象的hashCode。而HashMap從新計算hash值。
⑥
Hashtable和HashMap它們兩個內部實現方式的數組的初始大小和擴容的方式。HashTable中hash數組默認大小是11,增長的方式是 old*2+1。HashMap中hash數組的默認大小是16,並且必定是2的指數。
①兩個類都實現了List接口(List接口繼承了Collection接口),他們都是有序集合,均可以按位置索引號取出某個元素,而且其中的數據是容許重複的,這是HashSet之類的集合的最大不一樣處,HashSet之類的集合不能夠按索引號去檢索其中的元素,也不容許有重複的元素。
②同步性,Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不一樣步的。若是隻有一個線程會訪問到集合,那最好是使用ArrayList,由於它不考慮線程安全,效率會高些;若是有多個線程會訪問到集合,那最好是使用Vector,由於不須要咱們本身再去考慮和編寫線程安全的代碼。
③數據增加:ArrayList與Vector都有一個初始的容量大小,當存儲進它們裏面的元素的個數超過了容量時,就須要增長ArrayList與Vector的存儲空間,Vector默認增加爲原來兩倍,而ArrayList的增加策略在文檔中沒有明確規定(從源代碼看到的是增加爲原來的1.5倍)。ArrayList與Vector均可以設置初始的空間大小,Vector還能夠設置增加的空間大小,而ArrayList沒有提供設置增加空間的方法。
① ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
② 對於隨機訪問get和set,ArrayList以爲優於LinkedList,由於LinkedList要移動指針。
③對於新增和刪除操做add和remove,LinedList比較佔優點,由於ArrayList要移動數據