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 提供了一組標準的集合類,這些類實現了 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 棧是 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 介面的物件。
迭代器使您能夠遍歷集合,獲取或刪除元素。ListIterator 擴充套件了 Iterator 以允許雙向遍歷列表和修改元素。
| 序號 | 迭代器方法及描述 |
|---|---|
| 1 | 使用 Java 迭代器 以下是 Iterator 和 ListIterator 介面提供的所有方法及其示例的列表。 |
如何使用比較器?
TreeSet 和 TreeMap 都以排序順序儲存元素。但是,正是比較器定義了“排序順序”的確切含義。
此介面允許我們以任意多種不同的方式對給定集合進行排序。此外,此介面可用於對任何類的任何例項進行排序(即使是我們無法修改的類)。
| 序號 | 迭代器方法及描述 |
|---|---|
| 1 | 使用 Java 比較器 以下是 Comparator 介面提供的所有方法及其示例的列表。 |
總結
Java 集合框架使程式設計師能夠訪問預打包的資料結構以及用於操作它們演算法。
集合是可以儲存對其他物件的引用的物件。集合介面宣告可以在每種型別的集合上執行的操作。
集合框架的類和介面位於 java.util 包中。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP