天天看點

Java 淺談容器

一,Collection

Collection是一個接口,是一組獨立的對象。它提供了一系列了方法(不包括從Object繼承而來的方法)。它們也可通過Set或List執行所有的這些操作(List還有額外的功能),Map不是繼承自Collection的,是以會另行介紹。

以下所讨論的容器均是繼承自Collection。

1,List和Queue都是繼承自Collection,比較簡單,在這裡不再介紹了。

2,Set容器

1),Set(interface) 存入Set的每個元素都必須是唯一的,因為Set不儲存重複的元素。是以加入Set的元素必須定義equals()方法以確定對象的一緻性。

2),HashSet 為快速查找而設計的Set,其底層是hashtable(哈希表),是以存入的元素必須定義hashCode()。

3),TreeSet 保持次序的Set,底層是樹結構。使用它可以從Set中提取有序的序列。元素必須實作Comparable接口。

4),LinkedHashSet 具有HashSet的查詢速度,且内部使用連結維護元素的順序(插入的次序)。元素也必須定義hashCode()方法。

二,Map

映射表的基本思想是維護鍵值關聯,是以,你可以使用鍵來查找值。标準的Java類庫包含了Map的幾種基本思想,包括:HashMap、TreeMap、LinkedHashMap、WeakHashMap、ConcurrentHashMap、IdentityHashMap。它們都有同樣的基本接口Map,但是行為特性各不相同,這表現在效率、鍵值對的儲存及呈現的次序、對象的儲存周期、映射表如何在多線程程式中工作和判定“鍵”等價的政策等方面。

1),HashMap 使用了散列碼,提高了HashMap的速度。

2),LinkedHashMap 底層是hashtable,為了提高速度LinkedHashMap散列化了所有的元素,但是在周遊的時候,卻又以元素的插入順序傳回鍵值對。在其構造器内可以設定使之采用基于通路的最近最少使用算法,于是沒有被通路的元素就會出現隊列前面。對于需要定期清理元素以節省空間的程式來說是相當友善的。

3),TreeMap 基于紅黑樹的實作。檢視”鍵“或”鍵值對“時,它們會被排序(次序由Comparable或Comparator決定)。TreeMap的特點在于,所得到的結果都是排序的。TreeMap是唯一帶有subMap()方法的Map,它可以傳回一個子樹。

4),WeakHashMap 弱鍵映射,允許釋放映射所指向的對象。

5),ConcurrentHashMap 一種線程安全的Map,它不涉及同步加鎖。

6),IdentityHashMap 使用==代替equals()對”鍵“進行比較散列映射,專為解決特殊問題而設計的。

三,Collections

差別于Collection,提供了大量用于容器的卓越使用方法,詳細可以檢視JDK。