- Java核心編程
- 柳偉衛
- 2190字
- 2020-11-23 15:08:34
4.1 集合框架概述
集合用于存儲、檢索、操作和傳遞聚合數據,有點像簡易版本的內存數據庫,因此集合有時候也被稱為容器。通常,集合用來表示形成自然組的數據項,例如撲克牌(卡片集合)、郵件文件夾(字母集合)或電話目錄(名稱到電話號碼的映射)。如果之前已經使用過Java或者其他任何編程語言,那么對于集合應該不會陌生。
4.1.1 集合框架的定義
集合框架(Collections Framework)是用于表示和操作集合的統一體系結構。所有集合框架都包含以下內容:
· 接口:表示集合的抽象數據類型。接口允許獨立于其表示的細節來操縱集合。在面向對象語言中,接口通常形成層次結構。
· 實現:集合接口的具體實現。實質上,它們是可重用的數據結構。
· 算法:對實現集合接口的對象執行有用計算(如搜索和排序)的方法。算法被認為是多態的,也就是說,相同的方法可以用于適當的集合接口的許多不同實現。實質上,算法是可重用的功能。
除了Java集合框架之外,最著名的集合框架示例是C ++標準模板庫(STL)和Smalltalk的集合層次結構。從歷史上看,集合框架相當復雜,這使得它們具有陡峭的學習曲線的聲譽。我們相信Java集合框架打破了這一傳統。
4.1.2 Java集合框架的優點
Java集合框架提供以下優點:
· 減少編程工作:通過提供有用的數據結構和算法,集合框架可以讓開發者專注于程序的業務部分。通過促進不相關API之間的互操作性,Java集合框架使開發者無須編寫適配器對象或轉換代碼來連接API。
· 提高程序速度和質量:Java集合框架提供有用數據結構和高性能、高質量的算法實現,每個接口的各種實現是可互換的,因此可以通過切換集合實現來輕松調整程序。因為無須花精力重復編寫底層數據結構的操作,所以開發者可以有更多的時間用于改進程序的質量和性能。
· 允許不相關的API之間的互操作性:集合接口的API能夠無縫實現本地數據與網絡數據的互操作。
· 減少學習和使用新API的工作量:許多API自然地在輸入上收集集合并將它們作為輸出提供。過去,每個這樣的API都有一個專門用于操作其集合的小型子API。這些集合子API之間幾乎沒有一致性,因此開發者必須從頭開始學習每一個,并且在使用它們時很容易出錯。隨著標準集合接口的出現,問題就消失了。
· 減少設計新API的工作量:設計人員和實施人員每次創建依賴于集合的API時都不必重新發明輪子;相反,他們可以使用標準的集合接口促進。對于實現這些接口的對象進行操作的新算法也是如此。
4.1.3 集合框架常見的接口
Java集合框架中的核心集合接口封裝了不同類型的集合,這些接口允許獨立于其表示的細節來操縱集合。核心集合接口是Java集合框架的基礎。核心集合接口可形成層次結構,如圖4-1所示。

圖4-1 核心集合接口
在圖4-1中,主要有兩個接口樹。一個以Collection開頭,包括Set、SortedSet、List和Queue。Set是一種特殊的Collection,而SortedSet是一種特殊的Set,以此類推。另一個以Map開頭,包括SortedMap。這意味著Map不是真正的Collection。
核心集合接口的描述如下:
· Collection:集合層次結構的根。集合表示包含一組元素的對象。Collection接口是所有集合實現的最小公分母,用于傳遞集合并在需要最大通用性時對其進行操作。某些類型的集合允許重復元素,而其他集合則不允許。有些是有序的,有些則是無序的。Java平臺不提供此接口的任何直接實現,但提供了更具體的子接口的實現,例如Set和List。
· Set:不能包含重復元素的集合。該接口對數學集抽象進行建模,并用于表示集合,例如包含撲克牌的牌,構成學生日程的課程或在機器上運行的過程。
· List:有序集合(有時稱為序列)。List可以包含重復元素。List的用戶通常可以精確控制列表中每個元素的插入位置,并可以通過整數索引(位置)訪問元素。
· Queue:用于在處理之前保存多個元素的集合。除了基本的Collection操作外,Queue還提供額外的插入、提取和檢查操作。Queue通常(但不一定)以FIFO(先進先出)方式對元素進行排序,但優先級隊列除外。優先級隊列根據提供的比較器或元素的自然順序對元素進行排序。無論使用什么順序,隊列的頭部都是通過調用刪除或輪詢刪除的元素。在FIFO隊列中,所有新元素都插入隊列的尾部。其他類型的隊列可能使用不同的放置規則。每個Queue實現都必須指定其排序屬性。
· Deque:用于在處理之前保存多個元素的集合。除了基本的集合操作外,Deque還提供額外的插入、提取和檢查操作。Deque可用作FIFO(先進先出)和LIFO(后進先出)。在雙端隊列中,可以在兩端插入、檢索和刪除所有新元素。
· Map:將鍵映射到值的對象。Map不能包含重復的鍵。每個鍵最多可以映射一個值。
· SortedSet:一個按升序維護其元素的Set。提供了幾個額外的操作以利用排序。SortedSet用于自然排序的集合,例如單詞列表和成員成績表等。
· SortedMap:按升序鍵順序維護的Map。這是SortedSet的Map模擬。SortedMap用于自然排序的鍵/值對集合,例如字典和電話目錄等。
4.1.4 集合框架的實現
集合框架的每個接口都有默認實現。其實現主要分為以下幾類:
· 通用實現:這是最常用的實現,專為日常使用而設計。
· 專用實現:旨在用于特殊情況,并顯示非標準性能特征,使用限制或行為。
· 并發實現:旨在支持高并發性,通常以單線程性能為代價。這些實現是java.util.concurrent包的一部分。
· 包裝器實現:與其他類型的實現(通常是通用實現)結合使用,以提供增加或限制的功能。
· 便利實現:通常通過靜態工廠方法提供的小型實現,為特殊集合(例如,單例集)的通用實現提供方便、有效的替代方案。
· 抽象實現:這是骨架實現,有助于構建自定義的實現。Java允許開發者自定義集合的實現,但大多數情況下并不需要這么做。
Java提供的集合框架接口的實現如表4-1所示。
表4-1 集合框架接口的實現

后續章節還將繼續介紹這些實現的具體使用方式。
- Learning NServiceBus(Second Edition)
- Kubernetes實戰
- Learning Linux Binary Analysis
- 零基礎學Java(第4版)
- 從學徒到高手:汽車電路識圖、故障檢測與維修技能全圖解
- 算法訓練營:提高篇(全彩版)
- 編程數學
- Hands-On Full Stack Development with Go
- C語言程序設計
- Learning OpenStack Networking(Neutron)(Second Edition)
- C++20高級編程
- Access 2010數據庫應用技術實驗指導與習題選解(第2版)
- Android高級開發實戰:UI、NDK與安全
- 分布式數據庫HBase案例教程
- Python無監督學習