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

Java 集合框架核心總覽:List、Set、Map 實現原理與選型指南

     編輯:Java 綜合教學

Java 集合框架核心總覽:List、Set、Map 實現原理與選型指南

Java 集合框架是日常開發中使用頻率最高的 API 之一。本文梳理 Collection 體系與 Map 體系的核心實現類,分析其底層數據結構、性能特點與適用場景,助你做出最優選型決策。

集合體系簡圖

集合體系圖

圖例:虛線框 = 介面,實線框 = 具體類,空心箭頭 = 實現介面,實心箭頭 = 可生成對象。

一、List 介面:有序、可重複

實現類底層結構隨機訪問增刪性能線程安全適用場景
ArrayList動態陣列快 O(1)慢 O(n) 需搬移元素否預設首選,適合多讀少寫
LinkedList雙向鏈表慢 O(n)快 O(1) 僅需修改指針否頻繁頭尾增刪、實現 Queue/Deque
Vector動態陣列快慢是(synchronized)舊版遺留,不建議新代碼使用
Stack繼承 Vector--是舊版遺留,建議用 ArrayDeque 替代

最佳實踐:優先使用 ArrayList;僅當性能分析證明頻繁中間插入刪除成為瓶頸時,才考慮 LinkedList。

二、Set 介面:無序、不可重複

1. Hash 體系:基於雜湊表

實現類特點元素要求順序保證
HashSet查找極快 O(1)必須正確覆寫 hashCode() 與 equals()無序
LinkedHashSet兼具查找速度與插入順序/訪問順序同 HashSet維護插入順序或 LRU 順序

2. Tree 體系:基於紅黑樹

實現類特點元素要求順序保證
TreeSet元素自動排序,範圍查詢高效實現 Comparable 或構造時傳入 Comparator自然順序或定製順序

代碼範例:TreeSet 定製排序

// 方式一:元素實現 Comparable
class Stick implements Comparable<Stick> {
    private int length;
    public int compareTo(Stick o) { return this.length - o.length; }
}

// 方式二:傳入 Comparator
class Stone { private int volume; }
class MyComparator implements Comparator<Stone> {
    public int compare(Stone s1, Stone s2) { return s1.getVolume() - s2.getVolume(); }
}

// 使用
new TreeSet<Stick>();           // 自然排序
new TreeSet<Stone>(new MyComparator()); // 定製排序

關鍵提醒

無論雜湊還是樹形存儲,元素都必須正確覆寫 equals()。 放入 HashSet/LinkedHashSet 時 hashCode() 必須一致。良好習慣:覆寫 equals() 時必須同步覆寫 hashCode()。

SortedSet 介面常用方法

  • first() / last():獲取首尾元素
  • subSet(from, to) / headSet(to) / tailSet(from):範圍視圖
  • comparator():獲取比較器,null 表示自然排序

三、Map 介面:鍵值對映射

實現類底層結構特點順序適用場景
HashMap雜湊表 (JDK8+ 鏈表轉紅黑樹)查找/插入極快,取代 Hashtable無序通用鍵值存儲首選
LinkedHashMap雜湊表 + 雙向鏈表迭代順序為插入順序或訪問順序有序LRU 快取、需保持插入順序
TreeMap紅黑樹Key 自動排序,範圍查詢有序需按 Key 排序遍歷
Hashtable雜湊表線程安全但效能低,已過時無序不建議使用,改用 ConcurrentHashMap

四、可選操作與 UnsupportedOperationException

Collection 介面中部分修改方法(如 add()、remove())被標記為「可選操作」。實現類若不支援,應拋出 UnsupportedOperationException。

設計考量:避免為「不可修改集合」、「只能新增集合」等細分需求定義大量介面,保持類庫簡潔。對多數標準實現類,所有操作均受支援;只有特殊視圖(如 Collections.unmodifiableList() 返回的視圖)會拋出此異常。

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