Java 集合框架位於 java.util 包,核心接口繼承體系:
java.lang.Iterable
└── java.util.Collection
├── List (有序、可重複)
│ ├── ArrayList (動態數組)
│ ├── LinkedList (雙向鏈表/Deque)
│ └── Vector (同步、舊版)
├── Set (無序、不可重複)
│ ├── HashSet (HashMap 鍵集)
│ ├── LinkedHashSet (有序 HashSet)
│ └── TreeSet (TreeMap 鍵集,有序)
└── Queue (隊列)
├── PriorityQueue (堆)
├── ArrayDeque (雙端隊列)
└── LinkedList (也實現 Deque)
Map (鍵值映射,非 Collection 子接口)
├── HashMap (數組+鏈表/紅黑樹)
├── LinkedHashMap (有序 HashMap)
├── TreeMap (紅黑樹,有序)
├── WeakHashMap (弱引用鍵)
└── Hashtable (同步、舊版)
└── Properties (配置屬性)
transient Object[] elementDatagrow() → newCapacity = oldCapacity + (oldCapacity >> 1) (1.5 倍)O(1),實現 RandomAccess 標記接口O(n) 需數組拷貝 System.arraycopyNode first, last ,雙向鏈表節點O(n) 需遍歷,無 RandomAccessO(1)List、Deque、Queue、Cloneable、SerializableNode[] table ,桶數組resize() 重新雜湊分佈hash(key) = key.hashCode() ^ (key.hashCode() >>> 16),高低位混合減少碰撞// 內部實現極簡
private transient HashMap map;
private static final Object PRESENT = new Object();
public boolean add(E e) { return map.put(e, PRESENT) == null; }
O(log n) 增刪查Comparable 或提供 ComparatorsubMap()、headMap()、tailMap()Node[] table + synchronized (首節點) + CAStransfer()size() 使用 LongAdder 累加器高效統計AbstractCollection、AbstractList、AbstractSet、AbstractMap 提供模板方法,子類僅需實現核心抽象方法:
| 抽象類 | 核心抽象方法 | 典型子類 |
|---|---|---|
| AbstractCollection | iterator()、size() | ArrayList、HashSet |
| AbstractList | get(index)、set(index, element) | ArrayList、LinkedList |
| AbstractSet | 繼承 AbstractCollection | HashSet、TreeSet |
| AbstractMap | entrySet() | HashMap、TreeMap |
Iterator:單向遍歷,hasNext()、next()、remove()、forEachRemaining()ListIterator:雙向遍歷,支持索引、添加、修改Enumeration:舊版(Vector/Hashtable),僅 hasMoreElements()、nextElement()modCount 變化,拋 ConcurrentModificationException| 工具類 | 核心功能 |
|---|---|
| Collections | 排序、二分查找、反轉、洗牌、同步包裝 synchronizedList()、不可變視圖 unmodifiableList()、空集合、頻率統計 |
| Arrays | 排序、二分查找、比較、填充、複製 copyOf()、轉 List asList()、流操作 stream() |
| 需求場景 | 推薦集合 | 備選 | 避免使用 |
|---|---|---|---|
| 高頻隨機讀取、末尾增刪 | ArrayList | Vector (同步) | LinkedList |
| 高頻首尾增刪、隊列/棧 | ArrayDeque / LinkedList | ArrayList | |
| 去重、集合運算 | HashSet | LinkedHashSet (保序) | List + contains |
| 有序去重、範圍查詢 | TreeSet | HashSet + sort | |
| 鍵值映射、高併發讀寫 | ConcurrentHashMap | HashMap + 手動同步 | Hashtable |
| 鍵值映射、需保持插入序 | LinkedHashMap | HashMap | |
| 鍵值映射、需自然序/自定義序 | TreeMap | HashMap + sort keys | |
| 線程安全 List/Set/Map | Collections.synchronizedXxx() / ConcurrentXxx | CopyOnWriteArrayList (讀多寫極少) | Vector/Hashtable |
new ArrayList<>(expectedSize)、new HashMap<>(expectedSize / 0.75f + 1) 避免多次擴容List list = new ArrayList<>(); 便於替換實現ConcurrentHashMap、CopyOnWriteArrayList、BlockingQueueList.of()、Set.of()、Map.of(),線程安全、內存緊湊collection.stream()... 替代手動迭代,並行流利用多核Java 集合框架以 Collection 和 Map 為核心,通過數組、鏈表、哈希表、紅黑樹等數據結構實現豐富功能。掌握底層原理(擴容、雜湊、樹化)、核心 API 差異、線程安全模型、選型矩陣,能寫出高性能、無 Bug 的集合操作代碼。實戰中遵循「預估容量、介面編程、並發優先、不可變優先」原則。