Java基礎-集合框架

概念

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提供多種標準的比較器進行排序。