集合類是java提供的工具類,主要包括List、Set、Map和vector等類型。所有的集合相關類都位於java.util.*內。
集合類的總體框架圖如下圖所示:
對總體框架的說明:
集合框架中最頂層的接口有Iterator、Collection和Map三個。其中Itireator是所有迭代器需要實現的接口,Collection是所有的線性結構集合所要實現的接口,Map是所有的非線性集合所要實現的接口,元素以Key、value的形式保存。
Collection下層中包含了Queue、List和set三個自接口。這三種接口有分別有各自的特點。其中Queue對應的數據結構是隊列其特點是提供了兩個基本操作:在隊尾添加元素和在隊列的頭部刪除元素,具有先進先出的特點;List中元素同樣是以線性結構存儲,並且可以存在重復元素;Set具有和Collection一樣的接口,Set的特點是不允許存放重復元素,放入Set中的元素必須重寫equals方法以確保元素的唯一性。再下一層的結構中定義了AbstractCollection、AbstractList、AbstractSet、AbstractSequentialList三個抽象類,在抽象類中實現了部分方法,這種設計使用了適配器的設計模式,這樣做的好處是子類可以選擇性的實現一些方法。最底層是Collection類系中的具體集合類,有ArrayList、LinkedList、Vector、Stack、HashSet、TreeSet六個集合類。其中ArrayList是采用數組的形式來保存對象,在通過使用索引訪問元素的效率相對較高,但是插入刪除效率低;是使用鏈表來保存元素,在使用索引訪問元素時效率相對較低,但是插入刪除操作效率高;Vector也是使用數組保存元素,但是Vector是支持線程同步的,即同一時刻只支持同一個線程對Vector操作;Stack是使用的棧這種數據結構,只支持在頂端插入和彈出操作;HashSet和TreeSet都不能保存重復元素,但是TreeSet可以以升序保存元素,HashSet通過哈希表的方式保存元素。
Map下層同樣定義了一個AbstractMap來實現Map接口中的部分方法,以使得子類可以選擇性的實現Map中的方法。Map中的實現類有TreeMap、HashMap、WeakHashMap和HashTable四個。其中TreeMap是以有序的方式保存元素,可以給Map中Key進行排序。HashMap是哈希表數據結構,效率相對要高;HashTable是Dirctionary的子類,是可以將任何Key映射到相應的值,所以在HashTable中不允許key或value存在null,而HashMap中允許存在一個為null的key和任意個位null的value。
Iterator接口下有ListIterator接口,所有的迭代器都必須實現此接口。支持通過迭代器遍歷集合元素。