Java基礎-集合框架

Merbng發表於2018-05-13

概念

Java集合框架提供了資料持有物件的方式,提供了對資料集合的操作,Java集合框架位於java.util包下,主要有三個大類:Collect、Map介面以及對集合操作的工具類。

Collection

集合框架.png

  • ArrayList: 執行緒不同步,預設初始容量為10,當陣列大小不足時增長為當前長度的50%
  • Vector: 執行緒同步,預設初始容量為10,當陣列大小不足時增長率為當前長度的100%,它的同步是通過Iterator方法加synchronized實現的
  • LinkedList: 執行緒不同步,雙端佇列形式
  • Stack: 執行緒同步,繼承自Vector,新增了幾個方法來完成棧的功能。
  • Set: 是一種不包含重複元素的Collection,Set最多隻有一個null元素
  • HashSet: 執行緒不同步,內部使用HashMap進行資料儲存,提供的方法基本都是呼叫HashMap的方法,使用兩者本質是一樣的,集合元素可以為null
  • NavigableSet: 新增了搜尋功能,可以對給定元素進行搜尋:小於、小於等於、大於、大於等於,放回一個符合條件的最接近給定元素的key
  • TreeSet: 執行緒不同步,內部使用NavigableMap操作,預設元素“自然順序”排列,可以通過Comparator改變排序。
  • EnumSet:執行緒不同步,內部使用Enum陣列實現,速度比HashSet快,只能儲存在建構函式傳入的列舉類的列舉值。

Map

map.png

  • HashMap: 執行緒不同步,根據key的hashCode進行儲存,內部使用靜態內部類Node的資料進行儲存,預設初試大小為16,每次擴大一倍,當發生Hash衝突時,才有拉鍊法(連結串列),可以接受為null的鍵值(key)和值(value),JDK1.8中:當單個桶中元素個數大於等於8時,連結串列實現為紅黑樹實現;當元素個數小於6時,變回連結串列實現。由此來防止hashCode攻擊。
  • LinkedHashMap: 儲存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得道的記錄肯定是先插入的,也可以在構造時用帶引數,按照應用次數排序,在遍歷的時候會比HashMap慢,不過有種情況例外,當HashMap容量很大,實際資料較少時,遍歷起來可能會比LinkedHashMap慢,因為LinkHashMap的遍歷速度只和實際資料有關,和容量無關,而HashMap的遍歷速度和他的容量有關。
  • TreeMap 執行緒不同步,基於紅黑樹的NavigableMap實現,能夠把它儲存的記錄根據鍵排序,預設是按鍵值的升序排序,也可以指定排序的比較器,當Iterator遍歷TreeMap時,得道的記錄是排過序的。
  • HashTable: 執行緒安全,HashMap的迭代器是fail-fast迭代器。HashTable不能儲存Null的key和value

工具類

  • Collections、Arrays : 集合類的一個工具類/幫助類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜尋、以及執行緒安全等各種操作。
  • Comparable、Comparator: 一般用於物件的比較來實現排序,兩者略有區別
  • 類設計者沒有考慮到比較問題而沒有實現Comparable介面,這時我們就可以通過使用Comparator,這種情況下,我們是不需要改變物件的。
  • 一個集合中,我們可能需要有多重的排序標準,這時候如果使用Comparable就有些捉襟見肘了,可以自己繼承Comparator提供多種標準的比較器進行排序。

相關文章