1. HashTable和HashMap的區別
參考博客https://www.cnblogs.com/williamjie/p/9099141.html
HashTable和HashMap都是基於哈希表實現的,每一個元素都是一個鍵值對,內部通過單鏈表解決衝突問題
1.1 從繼承類來看
- Hashtable繼承自Dictionary類,實現了Map接口
- HashMap繼承自AbstractMap類,實現了Map接口
1.2 從線程的安全來看
- HashTable是線程安全的,HashTable每個方法都加了synchronized
- HashMap是線程不安全的,HashMap的方法中沒有加synchronized
1.3 遍歷方式內部實現
- HashTable使用Enumeration
- HashMap使用Iterator
1.4 數組初始化和擴容不同
- HashTable中hash數組默認大小是11,增加的方式是 arr*2+1
- HashMap中hash數組的默認大小是16,而且一定是2的指數
2. Vector、Array、ArrayList和LinkedList的區別
2.1 Vector、ArrayList和LinkedList
Vector、ArrayList和LinkedList都實現了List接口,而List是繼承Collection
- Vector和ArrayList的底層都是數組實現的,而LinkedList底層是雙向鏈表實現的
- Vector是線程安全的,方法加上了synchronized,ArrayList和LinkedList都線程不安全的
- 當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利於節約內存空間
2.2 ArrayList和Array
- Array大小是固定的,ArrayList的大小是動態變化的
- Array可以包含基本類型和對象類型,ArrayList只能包含對象類型
2.3 Collection和Array的區別
- Collection的子元素可以是不同的類型,Array的子元素都是相同的類型
- Collection大小可變,Array大小是固定的