Java集合類綜合

Java集合類是JDK學習中的一個經典切入點,也是讓初學者最初感覺到Java魅力的地方之一,你必定不會忘記不須要關心大小的ArrayList,不用本身實現的Queue,和隨處可見的HashMap。面試中,對Java基礎的考察中,集合類和String相關是兩個重點,這裏集中整理了關於集合類的一些知識點。 html

集合類的結構

要求手繪結構圖,同時拋出一些簡單的線索勾引面試官提問(好比講HashMap的HashTable的區別)。 java

image.png
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

  1. HashMap是非線程安全的,HashTable是線程安全的
  2. 擴容機制相同

HashMap & TreeMap

  1. HashMap實現了Map接口,不保障元素順序。實現原理balabala
  2. TreeMap實現了SortedMap接口,是一個有序的Map。內部採用紅黑樹實現,紅黑樹是一種維護有序數據的高效數據結構,但具體算法沒有掌握

HashMap & LinkedHashMap

  1. HashMap是無序的;若是但願容器按照自定義順序遍歷可以使用TreeMap;若是但願按照插入順序遍歷,可以使用LinkedHashMap
  2. 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

  1. HashMap實現了Map接口,原理balabala
  2. HashSet實現了Set接口,實質上封裝了一個HashMap。在HashSet封裝的HashMap中,entry.key爲HashSet的元素(從而保證元素的惟一),entry.value統一指向一個static final的Object對象

參考:git


本文連接:Java集合類綜合
做者:猴子007
出處:monkeysayhi.github.io
本文基於 知識共享署名-相同方式共享 4.0 國際許可協議發佈,歡迎轉載,演繹或用於商業目的,可是必須保留本文的署名及連接。github

相關文章
相關標籤/搜索