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

Java 集合框架全景圖解:Collection vs Collections、接口體系、類層次結構、核心實現對比

     編輯:Java 綜合教學

前言

Java 集合框架是面試高頻考點、日常開發核心工具。本文通過清晰的層次結構圖、核心接口/類對比表、代碼實戰演示,系統梳理 Collection 體系與 Map 體系的完整架構,澄清 Collection 與 Collections 的根本區別。

一、核心概念澄清

概念全稱性質核心作用
Collectionjava.util.Collection頂級接口單列集合根接口,定義 add/remove/iterator 等通用契約
Collectionsjava.util.Collections工具類靜態方法集:排序、同步包裝、二分查找、空集合、不可變視圖等

一句話記住:Collection 是接口(代表一類容器),Collections 是工具類(操作容器的工具箱)。

二、Collection 體系類層次結構

Collection 類層次結構圖

接口繼承關係

Iterable (根接口,foreach 依賴)
    ↑
Collection (單列集合根)
    ├─ List (有序、可重複、下標訪問)
    │   ├─ ArrayList (動態數組,查快增刪慢)
    │   ├─ LinkedList (雙向鏈表,增刪快查慢,實現 Deque)
    │   └─ Vector (同步、舊遺留,Stack 基於此)
    │
    ├─ Set (無序、不可重複)
    │   ├─ HashSet (HashMap 底層,O(1),無序)
    │   ├─ LinkedHashSet (鏈表維護插入序)
    │   └─ TreeSet (紅黑樹,有序,O(log n))
    │
    └─ Queue (隊列,FIFO/優先級)
        ├─ PriorityQueue (堆實現,優先級隊列)
        ├─ ArrayDeque (循環數組,雙端隊列,非線程安全)
        └─ LinkedList (也實現 Deque)
        
Map (雙列集合根,獨立體系)
    ├─ HashMap (數組+鏈表/紅黑樹,JDK 1.8 優化)
    ├─ LinkedHashMap (維護插入/訪問序)
    ├─ TreeMap (紅黑樹,有序)
    ├─ Hashtable (同步、舊、不允許 null)
    ├─ Properties (配置文件專用,繼承 Hashtable)
    └─ ConcurrentHashMap (分段鎖/CAS,高併發首選)

三、Map 體系類層次結構

Map 類層次結構圖

四、總結對比表(面試必備)

集合框架總結對比表

實現類底層結構有序性重複性Null 支持線程安全主要場景
ArrayList動態數組插入序可重複允許否隨機訪問多、末尾增刪
LinkedList雙向鏈表插入序可重複允許否頭尾增刪多、併發少
Vector動態數組插入序可重複允許是 (synchronized)舊代碼維護,新代碼不用
HashSetHashMap無序不可重複允許一個否去重、集合運算
LinkedHashSetLinkedHashMap插入序不可重複允許一個否去重+保持插入順序
TreeSetTreeMap (紅黑樹)自然/定製序不可重複不允許否排序去重、範圍查詢
HashMap數組+鏈表/紅黑樹無序Key 不重複Key/Value 允許 null否高性能 KV 存取
LinkedHashMapHashMap+雙向鏈表插入/訪問序Key 不重複Key/Value 允許 null否LRU 緩存、保持順序
TreeMap紅黑樹自然/定製序Key 不重複Key 不允許 null否有序 KV、範圍查詢
Hashtable數組+鏈表無序Key 不重複Key/Value 不允許 null是 (synchronized)舊代碼,新用 ConcurrentHashMap
ConcurrentHashMapNode[]+鏈表/紅黑樹+CAS無序Key 不重複Key/Value 不允許 null高 (分段鎖/無鎖)高併發 KV 存取

五、代碼實戰演示

package simplejava;

import java.util.*;

public class CollectionDemo {
    public static void main(String[] args) {
        // 1. List: 有序、可重複
        List arrayList = new ArrayList<>();
        arrayList.add("Program");
        arrayList.add("Creek");
        arrayList.add("Java");
        arrayList.add("Java");  // 允許重複
        System.out.println("ArrayList: " + arrayList);  // [Program, Creek, Java, Java]
        
        List linkedList = new LinkedList<>();
        linkedList.addAll(arrayList);
        System.out.println("LinkedList: " + linkedList);  // [Program, Creek, Java, Java]
        
        // 2. Set: 無序、去重
        Set hashSet = new HashSet<>();
        hashSet.addAll(arrayList);
        System.out.println("HashSet: " + hashSet);  // [Java, Creek, Program] 順序不固定
        
        Set linkedHashSet = new LinkedHashSet<>();
        linkedHashSet.addAll(arrayList);
        System.out.println("LinkedHashSet: " + linkedHashSet);  // [Program, Creek, Java] 保持插入序
        
        Set treeSet = new TreeSet<>();
        treeSet.addAll(arrayList);
        System.out.println("TreeSet: " + treeSet);  // [Creek, Java, Program] 自然序(字母序)
        
        // 3. Map: Key-Value、Key 唯一
        Map hashMap = new HashMap<>();
        hashMap.put("Windows", "2000");
        hashMap.put("Windows", "XP");  // Key 重複,值覆蓋
        hashMap.put("Language", "Java");
        hashMap.put("Website", "programcreek.com");
        System.out.println("HashMap: " + hashMap);  // {Website=programcreek.com, Windows=XP, Language=Java}
        
        Map treeMap = new TreeMap<>();
        treeMap.putAll(hashMap);
        System.out.println("TreeMap: " + treeMap);  // {Language=Java, Website=programcreek.com, Windows=XP} Key 自然序
        
        // 4. Collections 工具類常用操作
        List list = new ArrayList<>(Arrays.asList("c", "a", "b"));
        Collections.sort(list);  // 自然序排序
        System.out.println("Sorted: " + list);  // [a, b, c]
        
        Collections.reverse(list);
        System.out.println("Reversed: " + list);  // [c, b, a]
        
        List unmodifiable = Collections.unmodifiableList(list);
        // unmodifiable.add("d");  // 拋出 UnsupportedOperationException
        
        List synchronizedList = Collections.synchronizedList(new ArrayList<>());
        // 多線程環境下安全訪問
    }
}

運行結果

ArrayList: [Program, Creek, Java, Java]
LinkedList: [Program, Creek, Java, Java]
HashSet: [Java, Creek, Program]
LinkedHashSet: [Program, Creek, Java]
TreeSet: [Creek, Java, Program]
HashMap: {Website=programcreek.com, Windows=XP, Language=Java}
TreeMap: {Language=Java, Website=programcreek.com, Windows=XP}

六、選型決策樹(實戰速查)

需要存儲單個元素序列?
    ├─ 是 → 需要去重?
    │       ├─ 是 → 需要有序?
    │       │       ├─ 插入序 → LinkedHashSet
    │       │       └─ 排序序 → TreeSet (實現 Comparable / 傳 Comparator)
    │       └─ 否 → HashSet (最高性能)
    │
    └─ 否 (需要 Key-Value) → 需要高併發?
            ├─ 是 → ConcurrentHashMap
            └─ 否 → 需要有序?
                    ├─ 插入/訪問序 → LinkedHashMap
                    ├─ 排序序 → TreeMap
                    └─ 無序 → HashMap (首選)
                    
特殊場景:
- 線程安全 List/Set/Map → Collections.synchronizedXxx() / ConcurrentHashMap / CopyOnWriteArrayList
- 不可變集合 → Collections.unmodifiableXxx() / List.of() / Set.of() / Map.of() (Java 9+)
- 基本類型集合 → Eclipse Collections / FastUtil / Guava (避免裝箱拆箱開銷)

七、總結

  1. Collection vs Collections:接口 vs 工具類,根本區別
  2. Collection 體系:List(序/重) / Set(無序/不重) / Queue(隊列)
  3. Map 體系:獨立於 Collection,Key-Value 映射,Key 唯一
  4. 核心選型:ArrayList/HashMap 為默認首選,特定場景換專用實現
  5. 線程安全:舊 Vector/Hashtable 棄用,新用 ConcurrentHashMap/CopyOnWriteArrayList/同步包裝
  6. 現代 API:Java 9+ List.of/Set.of/Map.of 創建不可變集合,Stream API 處理集合管道
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved