java.util.Collection 為根介面,下分 List、Set、Queue。Map 不繼承 Collection 但屬集合框架核心。
Collection,不允許重複元素(equals() 比較)。HashSet(無序、O(1))、LinkedHashSet(維護插入序)、TreeSet(有序、紅黑樹、O(log n))。Set,元素依自然順序(Comparable)或指定 Comparator 排序。first()、last()、headSet()、tailSet()、subSet() 等範圍操作。TreeSet。compare(T o1, T o2) 與 equals(Object),實現自訂排序邏輯。TreeSet、TreeMap、Collections.sort()、Arrays.sort() 控制排序行為。Comparator.comparing()、thenComparing()、nullsFirst() 等,支援鏈式組合。Hashtable 但非同步。put(k,v)、get(k)、remove(k)、containsKey(k)、keySet()、values()、entrySet()。HashMap、LinkedHashMap、TreeMap(有序)、ConcurrentHashMap(執行緒安全)。Comparable(自然順序)。Comparator 實例(外部順序)。Comparable<T>,compareTo(T o) 回傳負/零/正代表小於/等於/大於。TreeSet/TreeMap 無需額外 Comparator 即可排序。class MySortedMapComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
// 依字串長度排序,長度相同再按字典序
int lenDiff = o1.length() - o2.length();
return (lenDiff != 0) ? lenDiff : o1.compareTo(o2);
}
}
// 使用
Set<String> set = new TreeSet<>(new MySortedMapComparator());
set.addAll(Arrays.asList("apple", "fig", "banana", "cherry", "date"));
// 輸出: fig, date, apple, cherry, banana
| 介面/實作 | 有序性 | 重複值 | 執行緒安全 | 典型用途 |
|---|---|---|---|---|
| HashSet | 無序 | 不允許 | 否 | 高效去重、成員資格測試 |
| LinkedHashSet | 插入序 | 不允許 | 否 | 需保留插入順序的去重 |
| TreeSet | 排序序 | 不允許 | 否 | 區間查詢、有序遍歷 |
| HashMap | 無序 | Key唯一 | 否 | 一般鍵值查找 |
| TreeMap | Key排序 | Key唯一 | 否 | 有序鍵值、區間查詢 |
| ConcurrentHashMap | 無序 | Key唯一 | 是 | 高併發 Map |