1. 程式人生 > >【Java原始碼分析】集合框架-Collections工具類-Arrays工具類

【Java原始碼分析】集合框架-Collections工具類-Arrays工具類

集合框架Collection 和Collections和Arrays工具類

一開始總是搞不清楚Collection和Collections的區別,不過看下程式碼應該很清楚,一個是介面,一個是工具類
Collection是集合類的上級介面,子介面主要有Set 和List、Map。平時用到的一些集合類都是該介面的間接實現類。
Collections是針對集合類的一個幫助類,提供了操作集合的工具方法:一系列靜態泛型方法實現對各種集合的搜尋、排序、執行緒安全化等操作。如果對於一些排序演算法或者一些集合操作的工具類的實現不是很熟悉,可以到這個幫助類裡面找找靈感,比看書有意思多了而且還可以學習到簡潔高效的程式碼風格。
Arrays和Collections的區別在於Arrays是一個線性表操作工具類

這一點在Collections和Arrays的原始碼註釋中可以看出,This class contains various methods for manipulating arrays (such as sorting and searching).而Collections中是This class consists exclusively of static methods that operate on or return collections.

Collections中有很多靜態方法可以返回各集合類的synchronized版本,即執行緒安全的版本,但是如果要用執行緒安全的結合類,首選Concurrent併發包下的對應的集合類。

Collection實現類的UML層次結構如下

集合主要實現類及繼承關係

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set
|
│├HashSet

│├TreeSet

└Queue
|
│├LinkedList

│├PriorityQueue

Map

├Hashtable

├HashMap

└TreeMap

除了上述的Queue List Set Map以及兩個工具類之外,集合框架中還有一個最常用的部分就是迭代器Iterator.集合框架主要學習部分也就是這4類集合實現以及迭代器和這兩個工具類

List介面通常表示一個列表,主要存放一些有序元素。元素可以重複,常用實現類為ArrayList和LinkedList,Vector。另外,LinkedList還是實現了Queue介面,因此也可以作為佇列使用。

Set介面通常表示一個集合,其中的元素不允許重複(放入set中的元素通常都需要複寫hashCode()和equals()方法)。常用實現類有HashSet和TreeSet,HashSet是通過Map中的HashMap實現的,而TreeSet是通過Map中的TreeMap實現的。另外,TreeSet還實現了SortedSet介面,因此是有序的集合(需要額外的實現Comparable介面實現排序的比較規則)。

Map介面是一個對映介面,其中的每個元素都是一個key-value鍵值對。抽象類AbstractMap通過介面卡模式實現了Map介面中的大部分函式,TreeMap、HashMap、WeakHashMap等實現類都通過繼承AbstractMap來實現,另外,HashTable直接實現了Map介面。

Queue介面是一個佇列介面,用的比較少,而且其實現類LinkedList也實現了List介面。

Iterator是遍歷集合的迭代器,不能遍歷Map,只用來遍歷Collection。

集合介面的主要實現類之間的對比

線上程安全性方面List中只有Vertor是執行緒安全的,Map中只有HashTable是執行緒安全的,如果想要使用執行緒安全的集合,一方面可以通過Collections幫助類另外一個方面是直接使用Concurrent包下面的執行緒安全集合。