Java集合類是JDK學習中的一個經典切入點,也是讓初學者最初感覺到Java魅力的地方之一,你必定不會忘記不須要關心大小的ArrayList
,不用本身實現的Queue
,和隨處可見的HashMap
。面試中,對Java基礎的考察中,集合類和String相關是兩個重點,這裏集中整理了關於集合類的一些知識點。 html
集合類的結構
要求手繪結構圖,同時拋出一些簡單的線索勾引面試官提問(好比講HashMap的HashTable的區別)。 java
image.png
XX和XX的區別
ArrayList & Vector & LinkedList
實現方式:
ArrayList、Vector 基於數組實現
LinkedList 基於鏈表實現
同步問題:
ArrayList、LinkedList 不是線程安全的
Vector 是線程安全的,實現方式是在方法上加 synchronized 關鍵字進行修飾
適用場景和性能消耗:
ArrayList 和 Vector 基於數組實現,因此隨機位置增、刪是 O(n) 的時間複雜度,另外可能會出現擴容的問題,也是 O(n) 的時間複雜度
LinkedList 不會出現擴容的問題,因此比較適合隨機位置增、刪。可是其基於鏈表實現,因此在定位時須要線性掃描,會消耗 O(n) 的時間複雜度
擴容:
ArrayList默認初始容量爲10,每次擴容爲原來的1.5倍
Vactor默認初始容量爲10,默認每次擴容爲原來的2倍 (可經過capacityIncrement設置)
HashMap & HashTable
HashMap是非線程安全的,HashTable是線程安全的
擴容機制相同
HashMap & TreeMap
HashMap實現了Map接口,不保障元素順序。實現原理balabala
TreeMap實現了SortedMap接口,是一個有序的Map。內部採用紅黑樹實現,紅黑樹是一種維護有序數據的高效數據結構,但具體算法沒有掌握
HashMap & LinkedHashMap
HashMap是無序的;若是但願容器按照自定義順序遍歷可以使用TreeMap;若是但願按照插入順序遍歷,可以使用LinkedHashMap
LinkedHashMap是HashMap的一個子類,與HashMap相比,在Entry中增長了before、after兩個引用,利用雙向鏈表維護插入順序
static class Entry <K ,V > extends HashMap .Node <K ,V > {
Entry<K,V> before, after;
Entry(int hash, K key, V value, Node<K,V> next) {
super (hash, key, value, next);
}
}複製代碼
HashSet & HashMap
HashMap實現了Map接口,原理balabala
HashSet實現了Set接口,實質上封裝了一個HashMap。在HashSet封裝的HashMap中,entry.key爲HashSet的元素(從而保證元素的惟一),entry.value統一指向一個static final的Object對象
參考:git
本文連接:Java集合類綜合 做者:猴子007 出處:monkeysayhi.github.io 本文基於 知識共享署名-相同方式共享 4.0 國際許可協議發佈,歡迎轉載,演繹或用於商業目的,可是必須保留本文的署名及連接。github