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

Java 集合框架入門筆記:核心介面、實現類別與選型指南

     編輯:Java 綜合教學

Java 集合框架入門筆記:核心介面、實現類別與選型指南

集合框架是 Java 開發中處理資料群組的標準工具。不同於固定大小、單一類型的陣列,集合提供動態擴容、異構儲存、豐富操作 API。本文為初學者梳理集合體系架構、核心特性與基本用法。

一、什麼是集合?為什麼需要它?

集合是物件的容器,可儲存任意類型、任意數量的物件引用。

特性陣列集合
大小固定,創建時指定動態,自動擴容
類型單一類型 (基本類型或引用類型)統一為 Object 引用,可儲存不同類型
功能基本索引存取豐富 API:增刪改查、排序、搜尋、串流操作
記憶體連續分配,基本類型存值堆上物件引用,額外物件頭開銷

二、集合框架核心介面體系

Collection 介面繼承樹

java.util.Collection (根介面)
├── java.util.List (有序、可重複)
│   ├── ArrayList  (動態陣列,查詢快)
│   ├── LinkedList (雙向鏈表,增刪快)
│   └── Vector     (同步陣列,舊版遺留)
└── java.util.Set (無序、不可重複)
    ├── HashSet    (哈希表,效能最佳)
    ├── LinkedHashSet (鏈表+哈希,保持插入序)
    └── TreeSet    (紅黑樹,自動排序)

java.util.Map (鍵值映射,Key 唯一)
├── HashMap      (哈希表,通用首選)
├── LinkedHashMap (保持插入/存取序)
├── TreeMap      (紅黑樹,Key 排序)
└── Hashtable    (同步哈希表,舊版遺留)

三、三大核心介面特性對比

介面有序性重複性索引存取典型實現核心場景
List✅ 插入序✅ 允許✅ get(index)ArrayList, LinkedList有序清單、佇列、棧
Set❌ 無序 (除 LinkedHashSet/TreeSet)❌ 唯一❌ 無索引HashSet, TreeSet去重、標籤、唯一 ID 集合
Map❌ 無序 (除 LinkedHashMap/TreeMap)Key 唯一
Value 可重複
✅ get(key)HashMap, TreeMap字典、快取、索引映射

四、常用實現類別基本用法

1. ArrayList - 最常用列表

List list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add(1, "Orange");  // 指定位置插入
System.out.println(list.get(0));  // Apple
list.remove("Banana");  // 按值刪除
list.remove(0);         // 按索引刪除
for (String fruit : list) { System.out.println(fruit); }

2. HashSet - 高效去重集合

Set set = new HashSet<>();
set.add(1);
set.add(2);
set.add(1);  // 重複元素不會添加
System.out.println(set.size());  // 2
System.out.println(set.contains(2));  // true

3. HashMap - 鍵值映射首選

Map map = new HashMap<>();
map.put("apple", 5);
map.put("banana", 3);
map.put("apple", 10);  // Key 相同,Value 覆蓋
System.out.println(map.get("apple"));  // 10
System.out.println(map.getOrDefault("orange", 0));  // 0 (預設值)

// 遍歷三種方式
for (String key : map.keySet()) { ... }
for (Integer value : map.values()) { ... }
for (Map.Entry entry : map.entrySet()) { ... }

五、泛型與類型安全

JDK 5+ 引入泛型,編譯期檢查類型:

List list = new ArrayList<>();
list.add("Hello");
// list.add(123);  // 編譯錯誤:型別不匹配
String s = list.get(0);  // 無需強制轉型

注意:泛型為編譯期擦除,執行期實際仍為 List,但編譯器保證類型安全。

六、常見新手錯誤與避坑

  1. 集合修改中遍歷:
    // 錯誤:ConcurrentModificationException
    for (String s : list) { if (s.equals("x")) list.remove(s); }
    
    // 正確:使用 Iterator
    Iterator it = list.iterator();
    while (it.hasNext()) { if (it.next().equals("x")) it.remove(); }
    
    // 或 Java 8+
    list.removeIf(s -> s.equals("x"));
  2. Map 遍歷效能:
    // 低效:兩次查找
    for (String key : map.keySet()) { map.get(key); }
    
    // 高效:單次遍歷
    for (Map.Entry entry : map.entrySet()) { ... }
  3. 自訂物件作 Key/元素:必須重寫 equals() 和 hashCode(),否則 HashSet/HashMap 無法正確判斷相等
  4. 初始容量預估:new ArrayList<>(1000)、new HashMap<>(1024) 減少擴容開銷

七、進階專題預告

  • 集合原理深度解析:ArrayList 擴容機制、HashMap 紅黑樹轉換、ConcurrentHashMap 分段鎖
  • 並發集合:CopyOnWriteArrayList、ConcurrentHashMap、BlockingQueue 族群
  • 串流 API 與集合:stream()、parallelStream()、Collector 收集器
  • 效能調優:JMH 基準測試、記憶體分析、GC 與集合關係

學習建議:先熟練掌握 ArrayList、HashSet、HashMap 三大「王者」的基本操作,再根據業務需求 (排序、並發、去重、佇列) 學習對應專用實現。理解資料結構原理 (陣列、鏈表、哈希表、紅黑樹) 是進階的關鍵。

集合框架是 Java 開發的基石,投入時間徹底掌握,將在日後無數次編碼中收獲回報。

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