集合(Collections):也常被叫做容器(Container),是一種將多個元素聚合起來組成一個單元的對象。它常常用來儲存、檢索、操作聚合的數(shù)據(jù)。
Java Collections Framework包含以下3個要素:
1.接口 使用抽象的數(shù)據(jù)類型來表示集合,使集合的操作具有數(shù)據(jù)獨立性,不和特定的數(shù)據(jù)類型相關(guān)
2.實現(xiàn) 實現(xiàn)了接口的定義,可復(fù)用的數(shù)據(jù)結(jié)構(gòu)
3.算法 算法是高效的可復(fù)用的功能單元,比如排序、搜索等。同時,算法又具有多態(tài)性,同一個算法可以被同一接口的不同實現(xiàn)進行調(diào)用。
從接口開始,來觀察一下Collections的結(jié)構(gòu)。
接口 核心的Collections接口封裝了不同的集合類型,如下圖所示:
這些集合的接口,給予我們在處理集合時忽略特定數(shù)據(jù)類型的能力。同時,它也是java 集合框架的基礎(chǔ)。應(yīng)當(dāng)注意,Map并不Collection.
所有的集合接口的聲明,都是泛型的,例如:
public interface Collection<E>......
而當(dāng)你需要一個Collection的實例時,你需要使用特定的對象類型(String Integer 或者你自定義的對象)來替換E,以此來通知編譯器在編譯時將對象綁定。
為了確保Java Collections Interface的可維護性,Java平臺并沒有提供為每一種接口提供一些特殊需求的變種(這些變種可能包括不可更改的集合、固定長度的集合、只能添加的集合等)。Java平臺的做法是,接口中定義的所有操作都被設(shè)計成可選的。一個接口的實現(xiàn)允許不支持接口中的方法。當(dāng)調(diào)用一個沒有被實現(xiàn)的操作時,則會拋出UnsupportedOperationException異常。
下面是對核心接口的一些描述:
·Collection 是集合體系架構(gòu)的根,定義了所有集合最基本的操作。但是Java平臺并沒有給出此接口的具體實現(xiàn),因為不同的接口有不同的需求,所以,平臺實現(xiàn)的是繼承此接口的其它子接口,如List Queue等。
·Set 一種不能包含重復(fù)元素的集合,是對數(shù)學(xué)中的集合概念的建模。
·List 一個有序集合,有時也被稱作序列(sequence)。使用List,一般要對插入、訪問進行成本控制。
·Queue 一個用來容納具有處理優(yōu)先級的元素的集合,除了具備基本的集合操外,還實現(xiàn)了一些特殊的插入、彈出及檢查操作。
隊列是典型的以FIFO處理數(shù)據(jù)的數(shù)據(jù)類型,但是,這并不是唯一的選擇。除此之外,還有優(yōu)先級隊列等。隊列根據(jù)實現(xiàn)提供的comparator或者元素的自然序列排列。每一種隊列的實現(xiàn)都有自己的元素排列方式。
·Map Map是一種將key與value相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)。不能包含重復(fù)的key,每一個key最多只能與一個value關(guān)聯(lián)。
最后兩種接口其實是Set與Map的sorted版本。包含了一些特殊的方法,按照升序來排列元素。