寫這系列文章是爲了一邊學習一邊總結,初次寫文,若有錯謬歡迎各位批評指正。java
若是沒有特別說明,源碼部分均是JDK1.8
數組
容器,指用來存放對象的工具。容器主要包括兩種,分別是Collection和Map,Collection用於存放對象,它的實現主要有List和Set,而Map用來存儲鍵值對的映射表。安全
boolean add(E e);//增長元素e
boolean remove(Object o);//刪除元素o
void clear();//刪除全部元素
boolean contains(Object o);//斷定是否包含元素o
boolean isEmpty();//判斷容器是否爲空
int size();//返回容器內包含的元素數量
Object[] toArray();//返回一個包含此集合中全部元素的數組
Iterator<E> iterator();//返回此集合中的元素的迭代器
複製代碼
固然還有其餘的一些方法,由於篇幅問題省略了。併發
下面簡要介紹一下容器框架內的一些重要實現框架
List是有序列表,可重複。工具
Set是無序集合,不可重複。性能
Map用於存儲鍵值對映射,提供從key到value的映射,key不可重複。學習
ArrayList:基於數組實現,無容量限制,在執行插入元素時可能要擴容,在刪除元素時並不會減少容量,在查找元素時要遍歷數組,對於非null的元素採起equals的方式尋找,非線程安全。優缺點:查找快,插入刪除效率低。spa
LinkedList:基於雙向鏈表機制,在插入元素時,須建立一個新的Entry對象,並切換相應元素的先後元素的引用;在查找元素時須遍歷鏈表;在刪除鏈表時,找到要刪除的元素而後在鏈表上刪除便可,非線程安全。優缺點:插入刪除快,查找慢。線程
Vector:基於 synchronized 實現的線程安全的 ArrayList,但在插入元素時容量擴充的機制和 ArrayList稍有不一樣,並可經過傳入 capacityIncrement 來控制容量的擴充,線程安全。
Stack:基於Vector實現,支持 LIFO,線程安全。
HashSet:基於HashMap實現,無容量限制,非線程安全。
TreeSet:基於TreeMap實現,支持排序(天然排序 或者 根據建立TreeSet 時提供的 Comparator 進行排序),非線程安全。
LinkedHashSet:繼承自HashSet底層是LinkedHashMap,優勢是能夠保證元素順序,即遍歷序和插入序是一致的。
BitSet:位操做的對象,值只有0或1即false和true,其內部維護了一個 long 數組。
HashMap:基於哈希表實現,底層是數組和鏈表/紅黑樹,是無序的鍵值對集合,非線程安全。
HashTable:基於哈希表實現,用鏈表解決衝突,線程安全。
LinkedHashMap:在HashMap的基礎上使用環形雙向鏈表保證key的順序,優勢是能夠保持插入的順序和訪問順序(LRU),非線程安全。
TreeMap:基於紅黑樹實現,優勢是支持排序,非線程安全。
ConcurrentHashMap:基於CAS+synchronized的HashMap,底層是數組和鏈表/紅黑樹,線程安全。
CopyOnWrite類容器類:線程安全,適合讀多寫少場景,容許併發讀,無鎖操做因此性能高,寫操做是寫以前將容器複製一份,在新的副本上執行寫操做而後再將原容器引用指向新容器。
Queue:隊列,具體實現有ArrayDeque、PriorityQueue等等。
Collection
是一個集合接口(集合類的一個頂級接口)。它提供了對集合對象進行基本操做的通用接口方法。Collection接口在Java類庫中有不少具體的實現。Collection接口的意義是爲各類具體的集合提供了最大化的統一操做方式,其直接繼承接口有List與Set。
Collections
是一個包裝類(工具類/幫助類)。它包含有各類有關集合操做的靜態多態方法。此類不能實例化,就像一個工具類,用於對集合中元素進行排序、搜索以及線程安全等各類操做,服務於Java的Collection框架。
參考: