List 和 Set 都實現了Collection 接口,而 Map 則沒有。java
(1) List(有序可重複)算法
List 採用線性方式存儲,可存放重複的數據。它有兩個子類:ArrayList、LinkedList。數組
ArrayList 底層是一個Object[]數組,意味着它有數組的特性,可是它比數組更靈活,無需設置長度,能夠動態增加,而且是有序的,能夠進行隨機訪問,因此查找快。因此 ArrayList 表明長度能夠改變的數組,能夠對元素進行隨機訪問。安全
ArrayList 有一個兄弟 Vector,Vector 和 ArrayList 不同的是:Vector 的方法之間是線程同步的,是線程安全的,效率較低;而 ArrayList 是異步的,是非線程安全的,效率較高。相比之下,建議使用 ArrayList。數據結構
LinkedList 的底層是採用鏈表方式進行排序的,執行增刪操做時,只需更改被更新元素先後的關聯便可。因此建議查詢用 ArrayList,而增刪用 LinkedList。異步
(2) Set(無序不可重複)spa
Set存放的是對象的引用,沒有重複的對象。線程
無序不可重複,指的是重複的元素會被覆蓋掉;這裏的無序是針對放入順序而言的,並非絕對的無序。對象
Set 集合有兩個子類,HashSet、TreeSet。blog
HashSet 是基於Hash算法實現的,它的底層是 HashMap,有着HashMap中鍵的無序和不可重複的特性。
TreeSet 實現了SortedSet接口,SortedSet 有排序的能力,意味着TreeSet 也有排序的能力,它是使用二叉樹進行排序的,不容許放入 null 值。
①HashSet:按照Hash算法來存取集合中的對象,存取速度比較快。
②TreeSet:實現了SortedSet 接口,能對集合中的對象進行排序。
③LinkedHashSet:內部使用鏈表維護元素順序,所以遍歷時返回的是插入順序。具備HashMap 的查詢速度。
(3) HashMap(以鍵值對形式存儲)
Map 存在的意義就是爲了快速查找,由於鍵是不可重複的,所以能夠經過鍵直接找到值。
實現Map 接口的子類有三個,HashMap、HashTable、TreeMap。
HashMap 和 HashTable 底層都是Hash 表結構,不同的是:HashMap 的線程是不安全的,容許鍵值對爲null,而HashTable 是線程安全的,不容許鍵值對爲null,二者的使用要看具體狀況而定。
TreeMap 實現了SortedMap 接口,底層是二叉樹,可用於給 Map 集合中的鍵值進行排序。且TreeMap的線程是不一樣步的。
Map中元素,能夠將key序列和value序列單獨抽取出來。
使用 keySet() 抽取 key 序列,將 map 中的全部 keys 生成一個 Set。
使用 values() 抽取 value 序列,將 map 中的全部values 生成一個 Collection。
爲何一個生成Set,而一個生成 Collection?
由於 key 老是獨一無二的,而 value 容許重複。
①HashMap:基於散列表的實現,插入和查詢鍵值對的開銷是固定的。
②TreeMap:基於紅黑樹的數據結構,遍歷時取得的數據是通過內部排序的,同時也是惟一一個帶有 subMap 方法的 Map。
③LinkedHashMap:內部使用鏈表維護元素順序,所以遍歷時返回的是插入次序。
ArrayList、HashSet、HashMap都在 java.util 包下
ArrayList
構造方法-----若是不傳參數,默認底層數組的長度是10;若是傳了參數,則底層數組的長度和參數相同。
size方法-----返回集合的長度(添加纔算)。
add方法-----向集合中添加元素,每添加一個,長度就加1,size++。
添加元素時,一旦長度超過底層數組長度則自動擴容,每次擴展遠長度*1.5 ------oldCapacity+(oldCapacity>>1)
使用add方法向指定的 List 索引中添加元素,若是當前元素有內容,則該位置的元素及其後續元素的索引會自動加1
get方法-----傳下標,取元素。
remove-----傳下標,刪除元素。
contains-----傳一個元素,返回元素是否存在於集合中。
HashSet
不能經過 get方法來取出元素,須要經過加強 for循環來遍歷輸出。
HashMap-----映射,鍵值對
put方法-----存放,過程當中鍵的值不可重複,重複會覆蓋掉原來的值。
get方法-----傳key,取value。
HashMap不支持加強 for循環,要輸出集合中的元素,可經過keySet()方法,轉換爲Set,而後輸出。
containsKey方法,判斷key是否存在。
containsValue方法,判斷value是否存在。
Iterator 是集合類的通用遍歷方式
如有錯誤之處,歡迎指正。謝謝!