天天看點

Java集合架構簡析

Java集合架構淺談

一,思考引入集合架構的原因;

二,簡析目前集合架構的類圖;

Java集合架構簡析

注:從圖中可以看出,JAVA的集合架構主要通過三個頂層的接口來組織的,分别是Collection,Map,Iterator。其中Iterator接口使用了疊代設計模式,用來統一對所有Collection子類集合的周遊及通路方式。Collection接口主要用來組織傳統意義上的集合,它派生了兩個子接口List,Set。之是以會派生出這兩種接口,是因為我們會根據集合允許存放的資料的不同,以及支援的操作的不同将傳統意義上的集合分為了兩類,一類是List系,這種集合不支援互異性。而另一類是Set系,這種集合的定義與數學上的集合的定義很相似,支援元素的互異性,無序性,确定性。而Map則是一類用來存放鍵值對映射關系的集合。

分析一下這個頂級接口:首先來看一下這個接口對集合常用的并集,交集,差集,補集的支援。addAll(Collection<?>)支援并集;retainAll(Collection<?>支援交集;

removeAll(Collection<?>)支援了差集集;補集是相對與全集來說的,接口不提供對補及操作的支援。

    接下來看一下集合常用的對屬性判斷的支援,集合容量,集合是否為空,一個元素是否在一個集合中,一個子集是否在集合中,分别用了size(),isEmpty(),contains(object),containsAll(Collection<?>)。

     接下來再來看一下集合常見的操作,增,珊,改,查,add(E),addAll(Collection<?>),remove(Object),removeAll(Collection<?>),查使用iterator()接口。集合對改的操作隻能間接支援比如先删除,再新增。頂層的接口往往都很凝練,是一種進階抽象。

作為Set和List雖然有很多不同的地方,但他們也有很多相同的地方,作為集合共有的一些方法,如集合的增,删,查,交,并,差等運算都放在了AbstractCollection這個抽象類裡面,而這個抽象類則面向接口Iterator<E>接口進行程式設計。子類繼承時,隻需要去實作抽象方法,并提夠這個接口給父類就可以了。

     有一個不明白的地方,為什麼在Collection接口中聲明的方法,要在子類Set中再聲明一遍?

三,詳細分析集合架構中幾個主體類的原理;

指定HashMap容量時,要盡量使用2的幾次方,這樣可以避免一些沒所謂的開銷。

掌握了上面知識之後,我們可以在建立 HashMap時根據實際需要适當地調整 load factor的值;如果程式比較關心空間開銷、記憶體比較緊張,可以适當地增加負載因子;如果程式比較關心時間開銷,記憶體比較寬裕則可以适當的減少負載因子。通常情況下,程式員無需改變負載因子的值。