Java基礎之集合框架

集合框架(collections framework)

首先要明確,集合表明了一組對象(和數組同樣,但數組長度不能變,而集合能)。Java中的集合框架定義了一套規範,用來表示、操做集合,使具體操做與實現細節解耦。html

其實說白了,能夠把一個集合當作一個微型數據庫,操做不外乎「增刪改查」四種操做,咱們在學習使用一個具體的集合類時,須要把這四個操做的時空複雜度弄清楚了,基本上就能夠說掌握這個類了。java

設計理念

主要理念用一句話歸納就是:提供一套「小而美」的API。API須要對程序員友好,增長新功能時能讓程序員們快速上手。
爲了保證核心接口足夠小,最頂層的接口(也就是Collection與Map接口)並不會區分該集合是否可變(mutability),是否可更改(modifiability),是否可改變大小(resizability)這些細微的差異。相反,一些操做是可選的,在實現時拋出UnsupportedOperationException便可表示集合不支持該操做。集合的實現者必須在文檔中聲明那些操做是不支持的。程序員

爲了保證最頂層的核心接口足夠小,它們只能包含下面狀況下的方法:數據庫

  1. 基本操做,像以前說的「增刪改查」api

  2. There is a compelling performance reason why an important implementation would want to override it.數組

此外,全部的集合類都必須能提供友好的交互操做,這包括沒有繼承Collection類的數組對象。所以,框架提供一套方法,讓集合類與數組能夠相互轉化,而且能夠把Map看做成集合。oracle

兩大基類Collection與Map

在集合框架的類繼承體系中,最頂層有兩個接口:app

  • Collection表示一組純數據框架

  • Map表示一組key-value對ide

通常繼承自CollectionMap的集合類,會提供兩個「標準」的構造函數:

  • 沒有參數的構造函數,建立一個空的集合類

  • 有一個類型與基類(CollectionMap)相同的構造函數,建立一個與給定參數具備相同元素的新集合類

由於接口中不能包含構造函數,因此上面這兩個構造函數的約定並非強制性的,可是在目前的集合框架中,全部繼承自CollectionMap的子類都遵循這一約定。

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,請知悉。

相關文章
相關標籤/搜索