Java 平台提供的 ArrayList、HashMap 等通用實作已覆蓋 99% 場景,但特定領域仍需客製化:
Map,get() 觸發感測器讀取而非記憶體查找。ConcurrentHashMap)或無鎖資料結構。Set → 位向量,O(1) 空間極小。List → 執程長編碼,犧牲隨機存取換空間。LinkedHashMap;允許重複元素的 Multiset(Bag)。Map、連續整數區間 List 等工具類。Collection 介面,無縫接入新框架。Java 提供 AbstractCollection、AbstractList、AbstractSet、AbstractMap 等骨架類,已實作介面中非核心方法(如 toString()、containsAll()),僅需實作核心抽象方法:
| 介面 | 骨架類 | 必須實作的核心方法 |
|---|---|---|
| Collection | AbstractCollection | iterator()、size() |
| List | AbstractList | get(int)、size()(可選 set、add、remove) |
| Set | AbstractSet | 繼承 AbstractCollection,無額外核心方法 |
| Map | AbstractMap | entrySet() |
Arrays.asList() 內部實作public static List asList(Object[] a) {
return new ArrayList(a); // 內部私有類別
}
private static class ArrayList extends AbstractList
implements RandomAccess, java.io.Serializable {
private final Object[] a;
ArrayList(Object[] array) { this.a = array; }
public Object get(int index) { return a[index]; }
public Object set(int index, Object element) {
Object old = a[index];
a[index] = element;
return old;
}
public int size() { return a.length; }
// 其餘 add/remove 拋出 UnsupportedOperationException
}
此實作:
AbstractList 自動獲得 indexOf、contains、toArray 等預設行為。RandomAccess 標記介面,讓 Collections.sort 等演算法選用隨機存取優化路徑。下集將實戰打造一個「高併發、分段鎖、支援 TTL 過期淘汰」的 CacheMap,示範如何組合 AbstractMap、ConcurrentHashMap 內部結構與 ScheduledExecutorService 實現企業級快取組件。