
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java 與 C++
- JVM - Java虛擬機器
- Java - JDK、JRE 與 JVM 的區別
- Java - Hello World 程式
- Java - 環境搭建
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode 系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期與時間
Java 控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - if-else 語句
- Java - switch 語句
- Java - for 迴圈
- Java - 增強 for 迴圈
- Java - while 迴圈
- Java - do-while 迴圈
- Java - break 語句
- Java - continue 語句
面向物件程式設計
- Java - 面向物件程式設計概念
- Java - 物件與類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 方法重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java 內建類
Java 檔案處理
Java 錯誤與異常
- Java - 異常
- Java - try-catch 塊
- Java - try-with-resources 語句
- Java - 多重 catch 塊
- Java - 巢狀 try 塊
- Java - finally 塊
- Java - throw 異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java 多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java 同步
Java 網路程式設計
- Java - 網路程式設計
- Java - 套接字程式設計
- Java - URL 處理
- Java - URL 類
- Java - URLConnection 類
- Java - HttpURLConnection 類
- Java - Socket 類
- Java -泛型
Java 集合
Java 介面
Java 資料結構
Java 集合演算法
高階 Java
- Java - 命令列引數
- Java - Lambda 表示式
- Java - 傳送郵件
- Java - Applet 基礎
- Java - Javadoc 註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像 API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional 類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64 編碼解碼
- Java - switch 表示式
- Java - Teeing 收集器
- Java - 微基準測試
- Java - 文字塊
- Java - 動態 CDS 歸檔
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 簡潔數字格式化
- Java - 垃圾回收
- Java - JIT 編譯器
Java 雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - Process API改進
- Java - Stream API改進
- Java - 增強@Deprecated註解
- Java - CompletableFuture API改進
- Java - 流
- Java - 日期時間API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java APIs與框架
Java 類引用
- Java - Scanner 類
- Java - 陣列
- Java - 字串
- Java - Date 類
- Java - ArrayList 類
- Java - Vector 類
- Java - Stack 類
- Java - PriorityQueue 類
- Java - LinkedList 類
- Java - ArrayDeque 類
- Java - HashMap 類
- Java - LinkedHashMap 類
- Java - WeakHashMap 類
- Java - EnumMap 類
- Java - TreeMap 類
- Java - IdentityHashMap 類
- Java - HashSet 類
- Java - EnumSet 類
- Java - LinkedHashSet 類
- Java - TreeSet 類
- Java - BitSet 類
- Java - Dictionary 類
- Java - Hashtable 類
- Java - Properties 類
- Java - Collection 類
- Java - Array 類
Java 有用資源
Java集合框架
在 Java 2 之前,Java 提供了臨時類,例如Dictionary、Vector、Stack 和 Properties 來儲存和操作物件組。雖然這些類非常有用,但它們缺乏一個核心統一的主題。因此,使用 Vector 的方式與使用 Properties 的方式不同。
為什麼需要集合框架?
集合框架的設計是為了滿足幾個目標,例如:
該框架必須具有高效能。基本集合(動態陣列、連結串列、樹和雜湊表)的實現必須高效。
該框架必須允許不同型別的集合以類似的方式工作,並具有高度的互操作性。
該框架必須能夠輕鬆擴充套件和/或適配集合。
為此,整個集合框架都是圍繞一組標準介面設計的。提供了幾個這些介面的標準實現,例如LinkedList、HashSet 和 TreeSet,您可以按原樣使用它們,也可以根據需要實現您自己的集合。
Java 集合框架
集合框架是表示和操作集合的統一架構。所有集合框架都包含以下內容:
實現,即 類 − 這些是集合介面的具體實現。從本質上講,它們是可重用的資料結構。
演算法 − 這些是在實現集合介面的物件上執行有用計算(例如搜尋和排序)的方法。據說演算法是多型的:即,相同的方法可以用於許多不同實現的適當集合介面。
除了集合之外,框架還定義了幾個對映介面和類。對映儲存鍵/值對。雖然對映並非集合(按術語的正確用法),但它們與集合完全整合。
集合框架的層次結構
集合框架的所有類和介面都可以在java.util 包中找到。下圖顯示了 Java 中集合框架的層次結構。(此處應插入圖表)

Java 集合介面
集合框架定義了幾個介面。本節概述每個介面:
序號 | 介面與描述 |
---|---|
1 | Collection 介面
這使您可以使用物件組;它是集合層次結構的頂層。 |
2 | List 介面
這擴充套件了Collection,List 的例項儲存元素的有序集合。 |
3 | Set 介面
這擴充套件了 Collection 來處理集合,集合必須包含唯一元素。 |
4 | SortedSet 介面
這擴充套件了 Set 來處理排序集合。 |
5 | Map 介面
這將唯一鍵對映到值。 |
6 | Map.Entry 介面
這描述了對映中的元素(鍵/值對)。這是 Map 的內部類。 |
7 | SortedMap 介面
這擴充套件了 Map,以便鍵按升序維護。 |
8 | Enumeration 介面
這個遺留介面定義了您可以列舉(一次獲取一個)物件集合中的元素的方法。這個遺留介面已被 Iterator 取代。 |
Java 集合類
Java 提供了一組實現 Collection 介面的標準集合類。一些類提供了完整的實現,可以按原樣使用,而另一些是抽象類,提供骨架實現,用作建立具體集合的起點。
標準集合類總結在下表中:
序號 | 類與描述 |
---|---|
1 | AbstractCollection 類 實現了大部分 Collection 介面。 |
2 | AbstractList 類 擴充套件 AbstractCollection 並實現 List 介面的大部分功能。 |
3 | AbstractSequentialList 擴充套件 AbstractList,供使用順序訪問(而非隨機訪問)元素的集合使用。 |
4 | LinkedList
透過擴充套件 AbstractSequentialList 實現連結串列。 |
5 | ArrayList
透過擴充套件 AbstractList 實現動態陣列。 |
6 | AbstractSet 擴充套件 AbstractCollection 並實現 Set 介面的大部分功能。 |
7 | HashSet
擴充套件 AbstractSet,用於雜湊表。 |
8 | LinkedHashSet
擴充套件 HashSet,允許按插入順序迭代。 |
9 | TreeSet
實現儲存在樹中的集合。擴充套件 AbstractSet。 |
10 | AbstractMap 實現 Map 介面的大部分功能。 |
11 | HashMap
擴充套件 AbstractMap,使用雜湊表。 |
12 | TreeMap
擴充套件 AbstractMap,使用樹。 |
13 | WeakHashMap
擴充套件 AbstractMap,使用具有弱鍵的雜湊表。 |
14 | LinkedHashMap
擴充套件 HashMap,允許按插入順序迭代。 |
15 | IdentityHashMap
擴充套件 AbstractMap,在比較文件時使用引用相等性。 |
AbstractCollection、AbstractSet、AbstractList、AbstractSequentialList 和 AbstractMap 類提供了核心集合介面的骨架實現,以最大限度地減少實現它們所需的努力。
前面章節討論了 java.util 定義的以下遺留類:
序號 | 類與描述 |
---|---|
1 | Vector
實現動態陣列。它類似於 ArrayList,但有一些區別。 |
2 | Stack
Stack 是 Vector 的子類,實現標準的後進先出 (LIFO) 棧。 |
3 | Dictionary
Dictionary 是一個抽象類,表示鍵值儲存庫,其功能與 Map 非常相似。 |
4 | Hashtable
Hashtable 是最初的 java.util 的一部分,是 Dictionary 的具體實現。 |
5 | Properties
Properties 是 Hashtable 的子類。它用於維護值列表,其中鍵是字串,值也是字串。 |
6 | PriorityQueue
PriorityQueue 類是基於優先順序堆的無界優先順序佇列。依賴自然排序的優先順序佇列也不允許插入不可比較的物件。 |
7 | BitSet
BitSet 類建立一個特殊型別的陣列,用於儲存位值。此陣列可以根據需要增加大小。 |
8 | ArrayDeque
ArrayDeque 類提供可調整大小的陣列並實現 Deque 介面。陣列雙端佇列沒有容量限制,因此它們會根據需要增長以支援使用。 |
9 | EnumMap
EnumMap 類是一個專門的 Map 實現,用於列舉鍵。列舉對映中的所有鍵都必須來自建立對映時顯式或隱式指定的單個列舉型別。 |
10 | Queue
Queue 介面在 java.util 包中提供,它實現 Collection 介面。Queue 實現 FIFO(先進先出)。這意味著先輸入的元素是先刪除的元素。 |
11 | Deque
EnumMap 類是一個專門的 Map 實現,用於列舉鍵。列舉對映中的所有鍵都必須來自建立對映時顯式或隱式指定的單個列舉型別。 |
集合演算法
集合框架定義了幾種可應用於集合和對映的演算法。這些演算法在 Collections 類中定義為靜態方法。
一些方法可能會丟擲 **ClassCastException**(當嘗試比較不相容的型別時發生)或 **UnsupportedOperationException**(當嘗試修改不可修改的集合時發生)。
Collections 定義三個靜態變數:EMPTY_SET、EMPTY_LIST 和 EMPTY_MAP。所有這些都是不可變的。
序號 | 演算法和描述 |
---|---|
1 | 集合演算法
這是一個所有演算法實現的列表。 |
如何使用迭代器?
通常,您需要遍歷集合中的元素。例如,您可能需要顯示每個元素。
最簡單的方法是使用迭代器,它是一個實現 Iterator 或 ListIterator 介面的物件。
迭代器使您可以遍歷集合,獲取或刪除元素。ListIterator 擴充套件 Iterator 以允許雙向遍歷列表和修改元素。
序號 | 迭代器方法和描述 |
---|---|
1 | 使用 Java 迭代器
這是一個 Iterator 和 ListIterator 介面提供的所有方法的列表,並附帶示例。 |
如何使用比較器?
TreeSet 和 TreeMap 都按排序順序儲存元素。但是,正是比較器定義了“排序順序”的確切含義。
此介面允許我們以多種不同的方式對給定的集合進行排序。此外,此介面還可用於對任何類的任何例項進行排序(即使是我們無法修改的類)。
序號 | 迭代器方法和描述 |
---|---|
1 | 使用 Java 比較器
這是一個 Comparator 介面提供的所有方法的列表,並附帶示例。 |
如何使用可比較物件?
TreeSet 和 TreeMap 都按排序順序儲存元素。我們可以使用 Comparable 介面來精確定義“排序順序”的含義。
此介面允許我們以多種不同的方式對給定的集合進行排序。此外,此介面還可用於對任何類的任何例項進行排序(即使是我們無法修改的類)。
序號 | 迭代器方法和描述 |
---|---|
1 | 使用 Java Comparable
這是一個 Comparable 介面提供的所有方法的列表,並附帶示例。 |
總結
Java 集合框架使程式設計師可以訪問預打包的資料結構以及用於操作它們的方法。
集合是一個可以儲存對其他物件的引用的物件。集合介面宣告可以對每種型別的集合執行的操作。
集合框架的類和介面位於 java.util 包中。