首先要明確,集合表明了一組對象(和數組同樣,但數組長度不能變,而集合能)。Java中的集合框架定義了一套規範,用來表示、操做集合,使具體操做與實現細節解耦。html
其實說白了,能夠把一個集合當作一個微型數據庫,操做不外乎「增刪改查」四種操做,咱們在學習使用一個具體的集合類時,須要把這四個操做的時空複雜度
弄清楚了,基本上就能夠說掌握這個類了。java
主要理念用一句話歸納就是:提供一套「小而美」的API。API須要對程序員友好,增長新功能時能讓程序員們快速上手。
爲了保證核心接口足夠小,最頂層的接口(也就是Collection與Map接口)並不會區分該集合是否可變(mutability),是否可更改(modifiability),是否可改變大小(resizability)這些細微的差異。相反,一些操做是可選的,在實現時拋出UnsupportedOperationException
便可表示集合不支持該操做。集合的實現者必須在文檔中聲明那些操做是不支持的。程序員
爲了保證最頂層的核心接口足夠小,它們只能包含下面狀況下的方法:數據庫
基本操做,像以前說的「增刪改查」api
There is a compelling performance reason why an important implementation would want to override it.數組
此外,全部的集合類都必須能提供友好的交互操做,這包括沒有繼承Collection
類的數組對象。所以,框架提供一套方法,讓集合類與數組能夠相互轉化,而且能夠把Map
看做成集合。oracle
在集合框架的類繼承體系中,最頂層有兩個接口:app
Collection
表示一組純數據框架
Map
表示一組key-value對ide
通常繼承自Collection
或Map
的集合類,會提供兩個「標準」的構造函數:
沒有參數的構造函數,建立一個空的集合類
有一個類型與基類(Collection
或Map
)相同的構造函數,建立一個與給定參數具備相同元素的新集合類
由於接口中不能包含構造函數,因此上面這兩個構造函數的約定並非強制性的,可是在目前的集合框架中,全部繼承自Collection
或Map
的子類都遵循這一約定。
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.)
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,請知悉。