集合框架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包下面的線程安全集合。