Java 集合
在 Java 2 之前,Java 提供了臨時類,例如 **Dictionary、Vector、Stack** 和 **Properties** 來儲存和操作物件組。儘管這些類非常有用,但它們缺乏一個核心統一的主題。因此,使用 Vector 的方式與使用 Properties 的方式不同。
集合框架的設計是為了實現幾個目標,例如:
該框架必須具有高效能。基本集合(動態陣列、連結串列、樹和雜湊表)的實現必須高效。
該框架必須允許不同型別的集合以類似的方式工作,並具有高度的互操作性。
該框架必須能夠輕鬆擴充套件和/或採用集合。
為此,整個集合框架都是圍繞一組標準介面設計的。提供了這些介面的幾個標準實現,例如 **LinkedList、HashSet** 和 **TreeSet**,您可以按原樣使用它們,也可以根據需要實現您自己的集合。
集合框架是表示和操作集合的統一架構。所有集合框架都包含以下內容:
**介面** - 這些是表示集合的抽象資料型別。介面允許獨立於其表示細節來操作集合。在面向物件的語言中,介面通常形成一個層次結構。
**實現,即類** - 這些是集合介面的具體實現。從本質上說,它們是可重用的資料結構。
**演算法** - 這些是在實現集合介面的物件上執行有用計算(例如搜尋和排序)的方法。據說演算法是多型的:也就是說,相同的方法可以用於許多不同實現的適當集合介面。
除了集合之外,框架還定義了幾個對映介面和類。對映儲存鍵/值對。儘管對映並非集合(按術語的正確用法),但它們與集合完全整合。
集合介面
集合框架定義了幾個介面。本節概述每個介面:
| 序號 | 介面和描述 |
|---|---|
| 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 提供了一組實現集合介面的標準集合類。一些類提供了可以按原樣使用的完整實現,而另一些類是抽象類,提供了用作建立具體集合的起點的骨架實現。
標準集合類在以下表格中進行了總結:
| 序號 | 類和描述 |
|---|---|
| 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 棧是 Vector 的一個子類,它實現了標準的後進先出棧。 |
| 3 | Dictionary Dictionary 是一個抽象類,它表示鍵/值儲存庫,其操作方式與 Map 非常相似。 |
| 4 | Hashtable Hashtable 是最初的 java.util 的一部分,是 Dictionary 的具體實現。 |
| 5 | Properties Property 是 Hashtable 的子類。它用於維護值列表,其中鍵是字串,值也是字串。 |
| 6 | BitSet BitSet 類建立一個特殊型別的陣列,該陣列儲存位值。此陣列可以根據需要增加大小。 |
集合演算法
集合框架定義了幾個可以應用於集合和對映的演算法。這些演算法在 Collections 類中定義為靜態方法。
一些方法可能會丟擲 **ClassCastException**(當嘗試比較不相容的型別時發生)或 **UnsupportedOperationException**(當嘗試修改不可修改的集合時發生)。
Collections 定義三個靜態變數:EMPTY_SET、EMPTY_LIST 和 EMPTY_MAP。所有這些都是不可變的。
| 序號 | 演算法和描述 |
|---|---|
| 1 | 集合演算法 以下是所有演算法實現的列表。 |
如何使用迭代器?
通常,您需要遍歷集合中的元素。例如,您可能想要顯示每個元素。
最簡單的方法是使用迭代器,迭代器是實現 Iterator 或 ListIterator 介面的物件。
Iterator 使您可以遍歷集合,獲取或刪除元素。ListIterator 擴充套件 Iterator 以允許雙向遍歷列表和修改元素。
| 序號 | Iterator 方法和描述 |
|---|---|
| 1 | 使用 Java 迭代器 以下是 Iterator 和 ListIterator 介面提供的所有方法及其示例的列表。 |
如何使用比較器?
TreeSet 和 TreeMap 都按排序順序儲存元素。但是,正是比較器定義了“排序順序”的確切含義。
此介面允許我們以任意多種不同的方式對給定的集合進行排序。此外,此介面可用於對任何類的任何例項進行排序(甚至是無法修改的類)。
| 序號 | Iterator 方法和描述 |
|---|---|
| 1 | 使用 Java 比較器 以下是 Comparator 介面提供的所有方法及其示例的列表。 |
總結
Java 集合框架使程式設計師可以訪問預打包的資料結構以及用於操作它們演算法。
集合是一個可以儲存其他物件引用的物件。集合介面聲明瞭可以對每種型別的集合執行的操作。
集合框架的類和介面位於java.util包中。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP