Collection (介面)
├── List (有序、可重複)
│ ├── ArrayList (動態陣列, 非同步)
│ ├── LinkedList (雙向鏈表, 非同步)
│ ├── Vector (動態陣列, 同步)
│ │ └── Stack (後進先出棧)
│ └── CopyOnWriteArrayList (並發安全)
└── Set (無序、唯一)
├── HashSet (HashMap 底層, 非同步)
├── LinkedHashSet (保持插入順序)
├── TreeSet (紅黑樹, 有序)
└── CopyOnWriteArraySet (並發安全)
Map (介面, 不繼承 Collection)
├── HashMap (非同步, 允許 null)
├── LinkedHashMap (保持插入/訪問順序)
├── TreeMap (紅黑樹, 有序)
├── Hashtable (同步, 不允許 null)
├── WeakHashMap (弱引用 Key, 適合緩存)
├── ConcurrentHashMap (高並發, 分段鎖/CAS)
└── IdentityHashMap (用 == 比較 Key)
所有集合實現類必須提供兩個構造器:無參構造器建立空集合、帶 Collection 參數的複製構造器。遍歷統一使用 iterator() 返回 Iterator,支援 hasNext()、next()、remove()。
Object[] 陣列get/set O(1),記憶體緊湊,CPU 緩存友好newCapacity = oldCapacity + (oldCapacity >> 1))ensureCapacity 預分配)prev/next/itemDeque 可作棧/隊列synchronized,效率低;迭代器為快速失效,併發修改拋 ConcurrentModificationExceptionpush/pop/peek,但官方推薦用 Deque (ArrayDeque) 替代Collections.synchronizedList 或 CopyOnWriteArrayList| 操作 | ArrayList | LinkedList | Vector |
|---|---|---|---|
| get(index) | O(1) ★ | O(n) | O(1) |
| add(E) | O(1) 攤銷 | O(1) ★ | O(1) 攤銷 |
| add(index, E) | O(n) | O(n) | O(n) |
| remove(index) | O(n) | O(n) | O(n) |
| 遍歷 | 極快 (for/for-each) | 較慢 (iterator) | 快 |
| 線程安全 | 否 | 否 | 是 (synchronized) |
HashMap,add/contains/remove 平均 O(1),無序,允許一個 nullTreeMap (紅黑樹),自然順序或 Comparator 排序,操作 O(log n)equals() 與 hashCode() 必須一致,否則無法正確去重hashCode()/equals(),不可變對象最佳ConcurrentHashMap 或 Collections.synchronizedMapsynchronized,單鎖競爭激烈ConcurrentHashMap 完全取代WeakReference),GC 時 Key 無強引用則自動移除條目ConcurrentHashMapLinkedHashMap (插入序) / TreeMap (排序)HashMapHashSetLinkedHashSetTreeSetArrayListLinkedList / ArrayDequeCopyOnWriteArrayListList/Set/Map,實例化具體實現,便於後續替換new ArrayList<>(capacity)、new HashMap<>(capacity) 避免頻繁擴容List.of()、Set.of()、Map.of() 創建只讀集合,線程安全且節省記憶體Iterator.remove() 或併發安全集合掌握集合底層原理與特性,才能在高併發、大數據量場景下寫出高效穩健的代碼。下次選集合時,先問自己:「訪問模式是什麼?併發需求如何?是否需要有序?」