Java集合框架綜述
最近被陸陸續續問了幾遍HashMap的實現,回答的不好,打算複習複習JDK中的集合框架,並嘗試分析其原始碼,這麼做一方面是這些類非常實用,掌握其實現能更好的優化我們的程式;另一方面是學習借鑑JDK是如何實現了這麼一套優雅高效的類庫,提升程式設計能力。
在介紹具體適合類之前,本篇文章對Java中的集合框架做一個大致描述,從一個高的角度俯視這個框架,瞭解了這個框架的一些理念與約定,會大大幫助後面分析某個具體類,讓我們開始吧。
集合框架(collections framework)
首先要明確,集合代表了一組物件(和陣列一樣,但陣列長度不能變,而集合能)。Java中的集合框架定義了一套規範,用來表示、操作集合,使具體操作與實現細節解耦。
其實說白了,可以把一個集合看成一個微型資料庫,操作不外乎“增刪改查”四種操作,我們在學習使用一個具體的集合類時,需要把這四個操作的時空複雜度
弄清楚了,基本上就可以說掌握這個類了。
設計理念
主要理念用一句話概括就是:提供一套“小而美”的API。API需要對程式設計師友好,增加新功能時能讓程式設計師們快速上手。
為了保證核心介面足夠小,最頂層的介面(也就是Collection與Map介面)並不會區分該集合是否可變(mutability),是否可更改(modifiability),是否可改變大小(resizability)這些細微的差別。相反,一些操作是可選的,在實現時丟擲UnsupportedOperationException
即可表示集合不支援該操作。集合的實現者必須在文件中宣告那些操作是不支援的。
為了保證最頂層的核心介面足夠小,它們只能包含下面情況下的方法:
- 基本操作,像之前說的“增刪改查”
- There is a compelling performance reason why an important implementation would want to override it.
此外,所有的集合類都必須能提供友好的互動操作,這包括沒有繼承Collection
類的陣列物件。因此,框架提供一套方法,讓集合類與陣列可以相互轉化,並且可以把Map
看作成集合。
兩大基類Collection與Map
在集合框架的類繼承體系中,最頂層有兩個介面:
Collection
表示一組純資料Map
表示一組key-value對
一般繼承自Collection
或Map
的集合類,會提供兩個“標準”的建構函式:
- 沒有引數的建構函式,建立一個空的集合類
- 有一個型別與基類(
Collection
或Map
)相同的建構函式,建立一個與給定引數具有相同元素的新集合類
因為介面中不能包含建構函式,所以上面這兩個建構函式的約定並不是強制性的,但是在目前的集合框架中,所有繼承自Collection
或Map
的子類都遵循這一約定。
Collection
java-collection-hierarchy
如上圖所示,Collection類主要有三個介面:
Set
表示不允許有重複元素的集合(A collection that contains no duplicate elements)List
表示允許有重複元素的集合(An ordered collection (also known as a sequence))Queue
JDK1.5新增,與上面兩個集合類主要是的區分在於Queue
主要用於儲存資料,而不是處理資料。(A collection designed for holding elements prior to processing.)
Map
MapClassHierarchy
Map並不是一個真正意義上的集合(are not true collections),但是這個介面提供了三種“集合視角”(collection views ),使得可以像操作集合一樣操作它們,具體如下:
- 把map的內容看作key的集合(map’s contents to be viewed as a set of keys)
- 把map的內容看作value的集合(map’s contents to be viewed as a collection of values)
- 把map的內容看作key-value對映的集合(map’s contents to be viewed as a set of key-value mappings)
總結
今天先開個頭,後面會陸陸續續來一系列乾貨,Stay Tuned。
需要說明一點,今後所有原始碼分析都將基於Oracle JDK 1.7.0_71,請知悉。
$ java -version java version "1.7.0_71" Java(TM) SE Runtime Environment (build 1.7.0_71-b14) Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
相關文章
- 【集合框架】Java集合框架綜述框架Java
- Java 集合框架(一)—— 介面綜述Java框架
- Java 集合框架綜述,這篇讓你吃透!Java框架
- 【JUC】JUC鎖框架綜述框架
- Java 執行緒綜述Java執行緒
- java集合統述Java
- 隱私集合求交(PSI)協議研究綜述協議
- Java 集合框架Java框架
- java集合框架Java框架
- 計算器製作JAVA版(綜述)Java
- Java集合(1)一 集合框架Java框架
- 【Java集合原始碼剖析】Java集合框架Java原始碼框架
- 【JAVA集合】JAVA集合框架及其常用方法Java框架
- Spring綜述Spring
- API安全綜述API
- Java Web基礎 --- Servlet 綜述(實踐篇)JavaWebServlet
- Java集合框架系列教程一:集合框架簡介Java框架
- 視覺SLAM綜述視覺SLAM
- Spring Bean 綜述SpringBean
- JavaScript模板引擎綜述JavaScript
- pl/sql reference綜述SQL
- (譯)haslayout 綜述(一)
- JAVA集合框架 - Map介面Java框架
- Java集合框架學習Java框架
- Java集合框架隨筆Java框架
- Java集合框架(一)-ArrayListJava框架
- Java基礎-集合框架Java框架
- Java中 集合框架概述Java框架
- Java 集合框架(二)—— ArrayListJava框架
- 李航「機器學習」最全綜述機器學習
- PostgreSQL掃描方法綜述SQL
- 目標檢測綜述
- 損失函式綜述函式
- 對話系統綜述
- Image Caption任務綜述APT
- 網路廣告研究綜述
- RocketMQ綜述(未完成)MQ
- 評價物件抽取綜述物件