Java中一些數據類型的區別

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大小是固定的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章