| 維度 | HashMap | Hashtable |
|---|---|---|
| Null 鍵/值 | 允許 | 禁止 |
| 線程安全 | 非同步 | 同步(synchronized) |
| 遍歷順序 | 可配合 LinkedHashMap 保持插入/訪問序 | 不可預測 |
| 遍歷方式 | Iterator(fail-fast) | Enumeration(非 fail-fast) |
| 地位 | 主流選擇 | 遺留類,建議用 ConcurrentHashMap |
get/put/remove、無序需求 → HashMap(O(1))。| 相同點 | 不同點 |
|---|---|
| 基於數組、索引訪問、保持插入序、迭代器 fail-fast、允許 null、隨機訪問 | Vector 同步(慢);ArrayList 非同步(快),可用 Collections.synchronizedList 按需加鎖;ArrayList 更通用 |
並發寫入場景首選 CopyOnWriteArrayList(讀多寫少)。
int[][])。addAll、迭代器等)。| 操作 | ArrayList | LinkedList |
|---|---|---|
隨機訪問 get(i) | O(1) | O(n) |
| 頭/尾插入刪除 | O(n) 需搬移/擴容 | O(1) |
| 中間插入刪除 | O(n) 搬移 | O(n) 遍歷 + O(1) 改指針 |
| 內存佔用 | 較小(連續數組) | 較大(節點對象 + 兩指針) |
經驗法則:默認 ArrayList,只有明確高頻頭尾增刪且少隨機訪問才考慮 LinkedList。
ArrayList、HashMap、TreeMap、Hashtable(實現 RandomAccess 標記接口或鍵值直接定位)。
EnumSet.of()、copyOf()、complementOf()。Vector、Hashtable、Properties、Stack — 方法級 synchronized,吞吐低。
| 集合 | 特點 |
|---|---|
ConcurrentHashMap | 分段鎖/CAS,高並發讀寫,弱一致性迭代器 |
CopyOnWriteArrayList | 寫時復制,讀無鎖,適合讀多寫少 |
CopyOnWriteArraySet | 同上,基於 CopyOnWriteArrayList |
ConcurrentLinkedQueue | 無鎖隊列,CAS 入隊出隊 |
迭代器為弱一致性,不拋 ConcurrentModificationException。
take() 隊列空等待,put() 隊列滿等待。ArrayBlockingQueue(有界)、LinkedBlockingQueue(可無界)、PriorityBlockingQueue(優先級)、SynchronousQueue(直接移交)。| 特性 | Queue (FIFO) | Deque (雙端) | Stack (LIFO) |
|---|---|---|---|
| 接口/類 | Queue 接口 | Deque 接口 | Stack 類(extends Vector) |
| 典型實現 | LinkedList、ArrayDeque | ArrayDeque、LinkedList | Stack |
推薦:用 ArrayDeque 替代 Stack(非同步、雙端、性能更優)。
sort()、reverseOrder()binarySearch()shuffle()max()、min()unmodifiableXxx()(只讀)、synchronizedXxx()(同步)、emptyXxx()(空集合)。| 維度 | Comparable | Comparator |
|---|---|---|
| 位置 | 類內部(compareTo) | 類外部(compare(o1,o2)) |
| 排序邏輯 | 自然序(單一) | 定製序(多種可插拔) |
| 適用場景 | 實體類自帶默認排序 | 第三方類、多維度排序 |
Arrays.sort()Collections.sort()(內部轉數組再排)list.sort(comparator)、stream().sorted()// 只讀視圖,任何修改拋 UnsupportedOperationException
Collection<T> readOnly = Collections.unmodifiableCollection(source);
// 同步視圖,線程安全包裝
Collection<T> sync = Collections.synchronizedCollection(source);
// 注意:複合操作(如迭代)仍需手動同步鎖定 sync 對象
排序(TimSort/雙軸快排)、二分查找、洗牌(Fisher-Yates)、極值、替換、旋轉等,均在 Collections 靜態方法中。
| 操作 | ArrayList | LinkedList | HashMap | TreeMap |
|---|---|---|---|---|
| get/put/remove | O(1)/O(n)/O(n) | O(n)/O(1)/O(1)* | O(1) | O(log n) |
| contains | O(n) | O(n) | O(1) | O(log n) |
* 針對頭尾操作。選型依據:時間/空間/並發/有序性 綜合權衡。
new ArrayList(1000)、new HashMap(1024) 避免擴容/rehash。List<String> list = new ArrayList<>()。ClassCastException。hashCode/equals。Collections 工廠方法(emptyList()、singletonMap() 等),勿重複造輪子。