JDK 5.0(代號 Tiger)在集合框架方面引入了顯著增強,除備受矚目的泛型與並發集合外,Arrays、Collections 工具類及全新的 Queue 接口也帶來了許多實用的新功能。本文將系統梳理這些變化。
Tiger 為所有陣列類型統一添加了 hashCode() 與 toString() 方法,並為物件陣列新增了深度比較系列:
deepEquals(Object[] a1, Object[] a2)deepHashCode(Object[] a)deepToString(Object[] a)此外,八種基本型別陣列均獲得 hashCode() 与 toString() 重載,極大簡化了陣列作為 Map 鍵或調試輸出的代碼。
得益於 Tiger 的可變參數特性,Arrays.asList() 現在可直接接受逗號分隔的元素列表:
List<String> list = Arrays.asList("One", "Two", "Three"); // 無需先建陣列
六個 checkedCollection()、checkedSet() 等方法,運行時攔截類型不匹配的插入操作,解決泛型擦除導致的「堆污染」問題:
Collection<String> safe = Collections.checkedCollection(
new HashSet<String>(), String.class);
// 若內部代碼嘗試加入非 String,將拋出 ClassCastException
emptySet()、emptyList()、emptyMap() 一步到位返回不可變空集合,無需再包裝 unmodifiableXxx()。
frequency(Collection<?> c, Object o):統計元素出現次數disjoint(Collection<?> c1, Collection<?> c2):判斷兩集合無交集addAll(Collection<? super T> c, T... elements):可變參數批量添加reverseOrder() 重載支援 Comparator<T>Queue<E> 繼承 Collection<E>,新增五個核心方法:
| 方法 | 行為 | 異常處理 |
|---|---|---|
offer(E e) | 尾部插入 | 失敗返回 false |
remove() | 移除並返回頭部 | 空隊列拋出 NoSuchElementException |
poll() | 移除並返回頭部 | 空隊列返回 null |
element() | 查看頭部不移除 | 空隊列拋出異常 |
peek() | 查看頭部不移除 | 空隊列返回 null |
建議優先使用 offer/poll/peek 組合,避免異常控制流。
六種構造函數支援自然順序或自定義 Comparator。元素必須實現 Comparable 或提供比較器,否則運行時拋出 ClassCastException。示例:
Queue<String> pq = new PriorityQueue<>(Arrays.asList(args));
while (!pq.isEmpty()) System.out.println(pq.poll()); // 按字典序輸出
java.util.concurrent 提供七種實現:
ArrayBlockingQueue、LinkedBlockingQueue:有界/無界阻塞隊列ConcurrentLinkedQueue:無鎖高併發隊列DelayQueue、PriorityBlockingQueue:延遲/優先級阻塞隊列SynchronousQueue:直接交換隊列(無容量)因設計決策,Collections 未提供 synchronizedQueue()、unmodifiableQueue()、emptyQueue();僅 checkedQueue() 計劃在後續版本補充。並發場景建議直接使用 java.util.concurrent 實現。