概述
Java所有集合類都在java.util包下,支援併發的集合在java.util.concurrent(juc)包下。
集合與陣列區別:
- 陣列大小是固定的,集合大小可以根據使用情況進行動態擴容。
- 陣列可以存放基本資料型別,集合只能存放引用資料型別。
Java中集合分為單列集合(實現Collection介面)和雙列集合(實現Map介面)兩種形式,常用集合框架圖如下圖所示:
Map集合
常用實現類有HashMap,HashTable,LinkedHashMap。
-
HashMap
HashMap底層原理實現請參考:。
- 底層是基於陣列和連結串列/紅黑樹實現的(jdk8採用的紅黑樹結構)。
- HashMap的key可以為null(因為key是不重複的所以只會僅存在一個),value可以存在多個null值。
- HashMap是執行緒不安全的。
-
HashTable
- 底層資料和HashMap是一樣的。
- HashTable的key和value都不允許為null。
- HashTable是執行緒安全的。
-
LinkedHashMap
- LinkedHashMap 繼承 HashMap,底層資料結構較HashMap多了一個雙迴圈連結串列。
- LinkedHashMap 是有序。
- LinkedHashMap 的key可以為null(因為key是不重複的所以只會僅存在一個),value可以存在多個null值。
- LinkedHashMap 是執行緒不安全的。
-
ConcurrentHashMap
- ConcurrentHashMap是執行緒安全的,效能比HashTable好。
List集合
常用實現類有ArrayList,LinkedList。
-
ArrayList
- ArrayList底層是基於陣列實現的,查詢快,增刪慢。
- ArrayList是執行緒不安全的,效率高。
-
LinkedList
- LinkedList是基於連結串列實現的,查詢慢,增刪快。
- LinkedList是執行緒不安全的,效率高。
-
Vector
- Vector底層是基於陣列實現的,查詢快,增刪慢。
- Vector是執行緒安全的,效率低(很少使用,面試有時候會問到)。
Set集合
常用實現類有HashSet,TreeSet,LinkedHashSet。
-
HashSet
- HashSet是無序的(底層是根據hash演算法進行排序的,對於我們來說它不能按照插入順序或者資料大小進行排序,所以我們稱為無序)。
- HashSet元素可以為null。
- HashSet是執行緒不安全的。
-
LinkedHashSet
- LinkedHashSet底層是基於連結串列和hash表實現的。
- LinkedHashSet是有序的。
- LinkedHashSet元素可以為null。
- LinkedHashSet是執行緒不安全的。
-
TreeSet
- TreeSet實現了SortedSet介面,採用的是紅黑樹演算法進行排序的。
- TreeSet是有序的。
- TreeSet元素不能為null。
- TreeSet是執行緒不安全的,
Queue佇列
Queue是Java1.5開始引入的。常用實現類有ArrayQueue。