集合接口:java
Collection(interface):List,Set,Queue;繼承 Iterator 接口;數組
Map接口與Collection無關,鍵值對安全
List:ArrayList,LinkedList,Vector多線程
ArrayList,Vector,都是基於數組的存儲模型,能夠經過下標(索引)直接找到數據,檢索時間複雜度爲O(1),在末尾插入,刪除操做也是同樣的,可是在其它位置增長,刪除的時間複雜度爲O(n)工具
LinkedList,基於雙向鏈表結構,增長,刪除的時間複雜度爲O(1),檢索時間複雜度爲O(n)性能
頻繁增刪可選擇LinkedList,頻繁檢索儘可能選擇ArrayList或Vector線程
ArrayList,Vector數組擴容,ArrayList擴容爲原容量的1.5倍,Vector默認擴容爲原來的2倍,可在初始化時配置參數capacityIncrement來設置增量code
Vector是線程安全的,經過在方法上增長修飾符synchronized實現,性能會有所損耗對象
java.util.Collections中提供了一個靜態內部類SynchronizedList也實現了線程同步,使用synchronized同步代碼塊(遍歷未同步),詳見SynchronizedList和Vector的區別排序
Map:HashMap,HashTable,ConcurrentHashMap,LinkedHashMap,TreeMap
HashMap,鍵和值都容許爲null;線程不安全;數組默認初始長度爲16,擴容爲原長*2;位運算取哈希
HashTable,鍵值都不能爲null;線程安全,方法用synchronized修飾;數組默認初始長度11,擴容爲原長*2+1(左移1位 +1);取模獲得哈希,由於線程安全、哈希效率的問題,HashMap效率比HashTable效率更高
ConcurrentHashMap,鍵值都不能爲null;線程安全的HashMap的實現;哈希運算與HashMap不一樣
HashTable對對象加鎖,當HashTable較大的時候,性能不好,ConcurrentHashMap引入了分割(Segment),將大的Map分紅多個小的Segment中,在多線程下Lock的只是一個Segment的元素,從而提高操做性能
LinkedHashMap,保存了數據的插入順序,遍歷操做按前後插入順序得到數據,較HashMap性能略差
TreeMap,實現了SortMap接口,保存的記錄可根據鍵排序(默認升序),也能夠指定排序的比較器,Iterator遍歷獲得的數據是已排序的
Set:HashSet,LinkedHashSet,TreeSet
Set不容許有重複元素的存在;Set是無序集合,List是有序集合;Set不能經過下標(索引)來訪問數據
HashSet,底層實現採用hash表,提高查詢效率
LinkedHashSet,內部使用散列以加快查詢速度,同時使用鏈表維護元素的次序
TreeSet,能夠對元素進行排序,需實現comparator接口
HashSet的add方法引用了HashMap的put方法,也是經過比較元素的hashCode,equals,來保證元素不重複,在使用自定義的類時,應重寫方法hashcode(),equals()
Collection是接口,是一個頂級的集合接口,提供了一些接口的基礎方法,主要的繼承接口有List,Set,Queue
Collections是一個集合的工具類,提供了一系列的靜態方法,一樣的工具類有Arrays等