首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDK 5.0 Collection框架新特性實戰總結:泛型、For-Each、通配符與類型令牌

     編輯:Java 相關知識

JDK 5.0 Collection 最大變革:泛型化。本文實戰總結核心新特性與最佳實踐。

語法糖:Enhanced For Loop (For-Each)

// 舊寫法
for (Iterator it = c.iterator(); it.hasNext(); ) {
    String s = (String) it.next();
}
// 新寫法:適用所有實作 Iterable 介面的類型
for (String s : c) { ... }

注意:需存取索引或 Iterator 本身 (如刪除、判斷首項) 時仍需傳統寫法。

泛型方法與類型推論

// Collections.singletonList(T o) → 推論 T
List list = Collections.singletonList("hello"); // T=String

// 無參泛型方法:從賦值目標推論
List empty = Collections.emptyList(); // T=Integer

// 條件運算子中無法推論 → 顯式指定
List list = flag ? Collections.emptyList() : null;

核心集合特性速查

類型特性適用場景
ArrayList動態陣列、隨機存取 O(1)、中間刪除 O(n)、非執行緒安全單執行緒、頻繁隨機存取
LinkedList雙向鏈表、首尾增刪 O(1)、循序存取、get(n) 實為 O(n)佇列/棧、頻繁首尾操作
HashSetHash 索引、拒重複、無序快速存在性檢查
TreeSet紅黑樹、有序、O(log n)需排序的無重複集合
LinkedHashSet維持插入順序需插入順序的去重
PriorityQueue最小元素優先出佇列任務調度、演算法
HashMapKey-Value、非執行緒安全、效能優於 Hashtable一般對映需求
TreeMapKey 有序需排序對映
LinkedHashMap維持插入/存取順序LRU 快取實作

通配符精要:PECS 原則

  • 上限 ``:唯讀 (Producer) — 可取出 T,不可放入 (除 null)
  • 下限 ``:唯寫 (Consumer) — 可放入 T,取出只能是 Object
  • 無界 `` ≈ ``:唯讀 Object
// 讀取:用上限
void readList(List list) { Number n = list.get(0); }

// 寫入:用下限
void writeList(List list) { list.add(5); }

// API 設計:盡量用通配符擴大適用範圍
void removeNegatives(List list); // 接受 List, List...

類型令牌實現泛型陣列

泛型擦除導致無法 `new T[]`。解法:建構式傳入 `Class`,利用 `Array.newInstance(clazz, size)` 建立正確類型陣列。

public class ArrayExample {
    private final Class clazz;
    public ArrayExample(Class clazz) { this.clazz = clazz; }
    @SuppressWarnings("unchecked")
    public T[] getArray(int size) {
        return (T[]) Array.newInstance(clazz, size);
    }
}
// 使用:new ArrayExample(String.class).getArray(10)

協變回傳類型

子類覆寫方法可回傳更具體類型,避免強制轉型、暴露欄位、專用方法三種反模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved