Java集合類是JDK學習中的一個經(jīng)典切入點,也是讓初學者最初感受到Java魅力的地方之一品擎,你一定不會忘記不需要關心大小的ArrayList
义辕,不用自己實現(xiàn)的Queue
双妨,和隨處可見的HashMap
。面試中,對Java基礎的考察中望侈,集合類和String相關是兩個重點,這里集中整理了關于集合類的一些知識點回论。
集合類的結構
要求手繪結構圖,同時拋出一些簡單的線索勾引面試官提問(比如講HashMap的HashTable的區(qū)別)分歇。
image.png
XX和XX的區(qū)別
ArrayList & Vector & LinkedList
- 實現(xiàn)方式:
- ArrayList透葛、Vector 基于數(shù)組實現(xiàn)
- LinkedList 基于鏈表實現(xiàn)
- 同步問題:
- ArrayList、LinkedList 不是線程安全的
- Vector 是線程安全的卿樱,實現(xiàn)方式是在方法上加 synchronized 關鍵字進行修飾
- 適用場景和性能消耗:
- ArrayList 和 Vector 基于數(shù)組實現(xiàn),所以隨機位置增硫椰、刪是 O(n) 的時間復雜度繁调,另外可能會出現(xiàn)擴容的問題萨蚕,也是 O(n) 的時間復雜度
- LinkedList 不會出現(xiàn)擴容的問題,所以比較適合隨機位置增蹄胰、刪岳遥。但是其基于鏈表實現(xiàn),所以在定位時需要線性掃描裕寨,會消耗 O(n) 的時間復雜度
- 擴容:
- ArrayList默認初始容量為10浩蓉,每次擴容為原來的1.5倍
- Vactor默認初始容量為10,默認每次擴容為原來的2倍(可通過capacityIncrement設置)
HashMap & HashTable
- HashMap是非線程安全的宾袜,HashTable是線程安全的
- 擴容機制相同
HashMap & TreeMap
- HashMap實現(xiàn)了Map接口捻艳,不保障元素順序。實現(xiàn)原理balabala
- TreeMap實現(xiàn)了SortedMap接口庆猫,是一個有序的Map认轨。內(nèi)部采用紅黑樹實現(xiàn),紅黑樹是一種維護有序數(shù)據(jù)的高效數(shù)據(jù)結構月培,但具體算法沒有掌握
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實現(xiàn)了Map接口,原理balabala
- HashSet實現(xiàn)了Set接口拌蜘,實質(zhì)上封裝了一個HashMap杆烁。在HashSet封裝的HashMap中,entry.key為HashSet的元素(從而保證元素的唯一)简卧,entry.value統(tǒng)一指向一個static final的Object對象
參考:
本文鏈接:Java集合類綜合
作者:猴子007
出處:https://monkeysayhi.github.io
本文基于 知識共享署名-相同方式共享 4.0 國際許可協(xié)議發(fā)布析校,歡迎轉(zhuǎn)載,演繹或用于商業(yè)目的铜涉,但是必須保留本文的署名及鏈接智玻。