HashMap 通過 hashCode() & (n-1) 定位桶位,哈希碼衝突會退化為鏈表遍歷,性能逼近 ArrayList。重寫 hashCode() 必須分散均勻,避免返回常量。
// 反例:所有對象哈希碼相同
@Override public int hashCode() { return 42; }
// 正例:結合業務字段
@Override public int hashCode() {
return Objects.hash(id, name, dept);
}
Vector、Hashtable 方法級 synchronized 粒度過粗,且無法解決複合操作原子性(如「檢查後插入」)。推薦:
ConcurrentHashMap — 高併發 MapCopyOnWriteArrayList — 讀多寫少列表Collections.synchronizedList() + 手動同步塊 — 簡單場景注意:Fail-Fast 異常 (ConcurrentModificationException) 是為了檢測併發修改,非線程安全保證。
TreeSet 僅在插入時按 compareTo 排序,元素字段修改後不會自動調整位置,導致順序錯亂。解決方案:
List,修改後調用 Collections.sort(list) 重排。HashSet 再轉回。| 接口 | 主要實現 | 特點 |
|---|---|---|
| List | ArrayList, LinkedList, Vector, Stack | 有序、可重複、隨機訪問 |
| Set | HashSet, LinkedHashSet, TreeSet, EnumSet | 不重複、HashSet 查找 O(1) |
| Map | HashMap, LinkedHashMap, TreeMap, Hashtable, Properties, EnumMap, WeakHashMap | 鍵值對、TreeMap 有序 |
| Queue | ArrayBlockingQueue, LinkedBlockingQueue, PriorityQueue, ArrayDeque | 阻塞/非阻塞、雙端隊列 |
工具類:Arrays (數組)、Collections (集合);擴展庫:Apache Commons Collections、Guava、Eclipse Collections。