天天看點

【Java集合源碼剖析】Java集合架構

轉載輕注明出處:http://blog.csdn.net/ns_code/article/details/35564663

    Java集合工具包位于Java.util包下,包含了很多常用的資料結構,如數組、連結清單、棧、隊列、集合、哈希表等。學習Java集合架構下大緻可以分為如下五個部分:List清單、Set集合、Map映射、疊代器(Iterator、Enumeration)、工具類(Arrays、Collections)。

    Java集合類的整體架構如下:

【Java集合源碼剖析】Java集合架構

    從上圖中可以看出,集合類主要分為兩大類:Collection和Map。

    Collection是List、Set等集合高度抽象出來的接口,它包含了這些集合的基本操作,它主要又分為兩大部分:List和Set。

    List接口通常表示一個清單(數組、隊列、連結清單、棧等),其中的元素可以重複,常用實作類為ArrayList和LinkedList,另外還有不常用的Vector。另外,LinkedList還是實作了Queue接口,是以也可以作為隊列使用。

    Set接口通常表示一個集合,其中的元素不允許重複(通過hashcode和equals函數保證),常用實作類有HashSet和TreeSet,HashSet是通過Map中的HashMap實作的,而TreeSet是通過Map中的TreeMap實作的。另外,TreeSet還實作了SortedSet接口,是以是有序的集合(集合中的元素要實作Comparable接口,并覆寫Compartor函數才行)。

    我們看到,抽象類AbstractCollection、AbstractList和AbstractSet分别實作了Collection、List和Set接口,這就是在Java集合架構中用的很多的擴充卡設計模式,用這些抽象類去實作接口,在抽象類中實作接口中的若幹或全部方法,這樣下面的一些類隻需直接繼承該抽象類,并實作自己需要的方法即可,而不用實作接口中的全部抽象方法。

    Map是一個映射接口,其中的每個元素都是一個key-value鍵值對,同樣抽象類AbstractMap通過擴充卡模式實作了Map接口中的大部分函數,TreeMap、HashMap、WeakHashMap等實作類都通過繼承AbstractMap來實作,另外,不常用的HashTable直接實作了Map接口,它和Vector都是JDK1.0就引入的集合類。

    Iterator是周遊集合的疊代器(不能周遊Map,隻用來周遊Collection),Collection的實作類都實作了iterator()函數,它傳回一個Iterator對象,用來周遊集合,ListIterator則專門用來周遊List。而Enumeration則是JDK1.0時引入的,作用與Iterator相同,但它的功能比Iterator要少,它隻能再Hashtable、Vector和Stack中使用。

    Arrays和Collections是用來操作數組、集合的兩個工具類,例如在ArrayList和Vector中大量調用了Arrays.Copyof()方法,而Collections中有很多靜态方法可以傳回各集合類的synchronized版本,即線程安全的版本,當然了,如果要用線程安全的結合類,首選Concurrent并發包下的對應的集合類。