Java 基礎 集合框架
Java中的集合從類的繼承和接口的實現結構來說,可以分為兩大類:
1 繼承自Collection接口,包含List、Set和Queue等接口和實現類。
2 繼承自Map接口,主要包含哈希表相關的集合類。
第一類
Collection接口繼承和實現結構圖如下:
圖中的綠色的虛線代表實現,綠色實線代表接口之間的繼承,藍色實線代表類之間的繼承,下同。
List
常用的是ArrayList和LinkedList。ArrayList通過數組實現,隨機訪問比較快,增刪操作比較慢。而LinkedList通過鏈表實現,增刪操作比較快,隨機訪問比較慢。兩者都是非線程安全的。
Queue
LinkedList實現了Deque接口,所以LinkedList具有雙端隊列的功能。PriorityQueue內部數據結構是堆,每次出隊列的元素總是當前隊列中最大值(大頂堆)或是最小值(小頂堆)。
Set
Set與List的主要區別是Set不允許元素重復,而List允許元素重復。HashSet和LinkedHashSet的區別在於後者保證元素插入集合的元素順序與輸出順序保持一致。而它們與TreeSet的區別在於TreeSet按照Comparator進行排序,默認情況下按照字符的自然順序升序排列。
第二類
Map接口繼承和實現結構圖如下:
Map類型的集合最大的優點在於其查找效率比較高,理想情況下可以實現O(1)的時間復雜度。Map中最常用的是HashMap。LinkedHashMap與HashMap的區別在於前者能夠保證插入集合的元素順序與輸出順序一致。這兩者與TreeMap的區別在於TreeMap根據鍵值進行排序,底層的實現也有本質的區別,如HashMap底層是一個哈希表,而TreeMap的底層是一棵樹。在多線程環境下,通常使用ConcurrentHashMap,因為Hashtable效率比較低。
參考資料
Java集合之整體結構
Java 基礎 集合框架