Collection (介面)
├── List (有序、可重複)
│ ├── ArrayList (動態陣列,非同步)
│ ├── LinkedList (雙向鏈表,非同步)
│ ├── Vector (動態陣列,同步)
│ └── Stack (繼承 Vector,LIFO)
└── Set (無序、不可重複)
├── HashSet
├── LinkedHashSet
└── TreeSet
Map (介面,不繼承 Collection)
├── HashMap (非同步,允許 null)
├── Hashtable (同步,不允許 null)
├── LinkedHashMap
├── TreeMap
└── WeakHashMap (弱引用 Key)
最基礎集合介面,代表一組 Object。所有實現類必須提供兩個建構子:無參(空集合)、單參 Collection(複製集合)。遍歷統一使用 Iterator:
Iterator<E> it = collection.iterator();
while (it.hasNext()) {
E element = it.next();
// 處理 element
}
get(index)、set(index, element) 隨機存取ListIterator:雙向遍歷、可新增/刪除/修改Object[] elementDataget/set/size/isEmpty:O(1)add:均攤 O(1),擴容 1.5 倍ensureCapacity() 預分配addFirst、removeLast 等synchronized,執行緒安全ConcurrentModificationExceptionpush/pop/peek/empty/searchArrayDequeequals() 判斷重複nullequals() 的欄位keySet()、values()、entrySet()null Key/ValuenullhashCode() 與 equals()// 核心契約:
// 1. equals 相等 → hashCode 必相等
// 2. hashCode 相等 → equals 不一定相等 (碰撞)
// 3. 必須同時覆寫兩者,否則 HashMap/Hashtable 異常
@Override
public boolean equals(Object o) { ... }
@Override
public int hashCode() { ... }
| 需求 | 推薦 | 備註 |
|---|---|---|
| 單執行緒、高效能隨機存取 | ArrayList | 預設首選 |
| 頻繁首尾增刪、佇列/堆疊 | LinkedList / ArrayDeque | ArrayDeque 非同步且更快 |
| 多執行緒共享 List | Collections.synchronizedList() / CopyOnWriteArrayList | 視讀寫比例選擇 |
| 單執行緒、Key-Value | HashMap | 預設首選 |
| 多執行緒共享 Map | ConcurrentHashMap | 分段鎖,高併發效能優 |
| 需排序 Map | TreeMap | 紅黑樹,O(log n) |
| 需插入順序 Map | LinkedHashMap | 雙向鏈表維序 |
newCapacity = oldCapacity + (oldCapacity >> 1))List 而非 ArrayList,便於後續替換實現List<String> list = new ArrayList<>();String[] 避免同步、方法呼叫、擴容開銷