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

Java 集合框架易混淆知識點全解析:Collection vs Collections、Iterator vs Iterable

     編輯:Java 相關知識

Java 集合框架核心易混淆點深度解析

Java 集合框架中存在多組名稱相似、功能迥異的核心概念,初學者極易混淆。本文系統梳理 Collection/Collections、Iterator/Iterable 等關鍵差異,並從源碼層面解析設計動機。

一、Collection vs Collections

維度CollectionCollections
類型介面工具類
層級集合框架根介面靜態方法容器
核心功能定義集合基本操作契約提供排序、查找、同步包裝等演算法
典型方法add(), size(), contains(), remove()sort(), binarySearch(), reverse(), synchronizedList()

Collections.sort() 內部原理

public static <T extends Comparable<? super T>> void sort(List<T> list) {
    Object[] array = list.toArray();
    Arrays.sort(array); // 核心委派給 Arrays.sort()
    ListIterator<T> it = list.listIterator();
    for (int i = 0; i < array.length; i++) {
        it.next();
        it.set((T) array[i]);
    }
}

最終由 ComparableTimSort (TimSort 變體) 執行排序,要求元素實作 Comparable 或提供 Comparator。

二、Iterator vs Iterable

詳見前文「Iterable 與 Iterator 差異深度解析」,此處補充關鍵設計動機:

為什麼不讓 Collection 直接實作 Iterator?

  1. 狀態污染:Iterator 內部 cursor 游標屬於遍歷狀態。若 Collection 直接實作,集合對象將攜帶遍歷狀態,導致:
      - 多線程遍歷衝突
      - 巢狀遍歷時外層游標被內層修改
      - 方法間傳遞集合時狀態不可預期
  2. 單一遍歷限制:同一時刻只能存在一個遍歷位置,無法支援並發多重遍歷
  3. Iterable 解決方案:每次 iterator() 返回全新實例,狀態天然隔離,支援無限並發遍歷

三、List/Set/Map 介面體系關鍵差異

介面有序性重複性典型實現
List有序 (插入序)允許重複ArrayList, LinkedList
Set無序 (HashSet) / 有序 (LinkedHashSet/TreeSet)不允許重複HashSet, TreeSet
Map鍵無序 / 有序鍵唯一HashMap, TreeMap

四、常見陷阱與最佳實踐

  1. 遍歷中移除元素:必須用 iterator.remove(),直接 collection.remove() 拋 ConcurrentModificationException
  2. 自定義對象存入 Set/Map Key:必須正確重寫 equals() 和 hashCode(),否則去重/查找失效
  3. Collections.synchronizedXxx() 只保證單方法原子性,複合操作仍需外部同步
  4. Arrays.asList() 返回固定大小列表,不可 add/remove,否則拋 UnsupportedOperationException

五、Java 8+ 新增便利方法

  • Collection.removeIf(Predicate):條件刪除
  • List.replaceAll(UnaryOperator):元素轉換
  • Map.computeIfAbsent/putIfAbsent/merge:原子性條件更新
  • Stream API 配合 Lambda 取代傳統迭代器模式

精通這些核心差異與陷阱,能讓您寫出更健壯、高效的集合操作代碼,避免生產環境隱性 Bug。

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