1. 程式人生 > >【Java集合源代碼剖析】Java集合框架

【Java集合源代碼剖析】Java集合框架

set接口 eset eem jdk1 叠代 array 學習 tail pan

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


Java集合工具包位於Java.util包下,包括了非常多經常使用的數據結構,如數組、鏈表、棧、隊列、集合、哈希表等。學習Java集合框架下大致能夠分為例如以下五個部分:List列表、Set集合、Map映射、叠代器(Iterator、Enumeration)、工具類(Arrays、Collections)。

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並發包下的相應的集合類。


【Java集合源代碼剖析】Java集合框架