數組長度固定、僅支援線性結構,無法滿足動態增長、樹/圖/哈希等複雜數據結構需求。Java 集合框架(java.util)提供統一接口體系:接口、實現、算法三大支柱。
Object,取出需顯式向下轉型ClassCastExceptionList<String> list = new ArrayList<>();
list.add("alpha"); // 編譯期檢查類型
String s = list.get(0); // 無需轉型,類型安全
// list.add(123); // 編譯報錯
List<Integer> nums = new ArrayList<>();
nums.add(10); // autobox: int → Integer
int n = nums.get(0); // unbox: Integer → int
for (String s : list) { ... }
// 等價於 iterator 遍歷,但隱藏了 Iterator,不可 remove/replace 元素
// 可修改可變對象內部狀態(如 StringBuilder.append)
Iterable<E> → iterator()
Collection<E> → size/clear/isEmpty/add/remove/contains/toArray...
├── List<E> // 可重複、有序、索引訪問
│ ├── ArrayList, LinkedList, Vector, Stack
├── Set<E> // 唯一、最多一個 null
│ ├── HashSet, LinkedHashSet
│ └── SortedSet<E> → TreeSet
└── Queue<E> // FIFO
├── PriorityQueue, ArrayDeque
└── Deque<E> (雙端隊列)
Map<K,V> (非 Collection 子接口)
├── HashMap, Hashtable, LinkedHashMap
└── SortedMap<K,V> → TreeMap
elements() 返回 Enumeration 非 fail-fastList + Deque,首尾增刪 O(1)// List → 數組
String[] arr1 = list.toArray(new String[0]);
// 數組 → List(視圖,雙向同步修改)
List<String> list = Arrays.asList("a", "b", "c");
public interface Comparable<T> {
int compareTo(T o); // 負/零/正:小於/等於/大於
}
// 包裝類、String 均實現,配合 Collections.sort/Arrays.sort
Comparator<String> ignoreCase = (s1, s2) -> s1.compareToIgnoreCase(s2);
Collections.sort(list, ignoreCase);
// 或方法引用:String::compareToIgnoreCase
Collections.binarySearch(list, key); // 返回索引或 (-(插入點)-1)
Collections.binarySearch(list, key, cmp); // 帶比較器版本
// 外部迭代
for (String s : list) System.out.println(s);
// 內部迭代
list.forEach(s -> System.out.println(s));
List<String> result = list.stream()
.filter(s -> s.length() > 3)
.map(String::toUpperCase)
.distinct()
.sorted()
.collect(Collectors.toList());
list.parallelStream().forEach(...); // 或 stream().parallel()
toList/toSet/toMapgroupingBy 分組統計:groupingBy(Person::getSex, counting())summingInt/averagingDouble 聚合int sum = list.stream().mapToInt(Integer::intValue).sum();
// 或 reduce(0, (a,b) -> a+b)
Runnable/Callable/Comparator/Function/Consumer/PredicateClassName::staticMethod、instance::method、ClassName::newinterface MyInterface {
void abstractMethod();
default void defaultMethod() { ... } // 可被實現類繼承或覆蓋
static void staticMethod() { ... } // 接口級工具方法
}
// 解決接口擴展破壞現有實現類的問題(如 Collection 添加 stream())
集合框架經歷三次重大演進:統一接口(JDK 1.2) → 泛型/自動裝箱/foreach(JDK 1.5) → Stream/Lambda/默認方法(JDK 8)。掌握核心接口契約、實現類特性、泛型類型安全、函數式處理流,是高效 Java 開發的基石。