1. 程式人生 > >HashMap、HashSet、TreeMap面試

HashMap、HashSet、TreeMap面試

一、HashMap

1.HashMap是基於   雜湊表的   Map介面的    非同步   實現。此實現提供所有可選的對映操作,

2.並允許使用null值和null鍵(HashMap最多隻允許一條記錄的鍵為null,允許多條記錄的值為null。)

3.此類不保證對映的順序,特別是它不保證該順序恆久不變

4.HashMap中不允許出現重複的鍵(Key)

5.Hashmap是非執行緒安全的,如果多個執行緒同時訪問一個HashMap,可能會導致資料不一致,所以當其中至少一個執行緒從結構上(指新增或者刪除一個或多個對映關係的任何操作)修改了,則必須保持外部同步,以防止對對映進行意外的非同步訪問。

6.其迭代器是fail-fast的

7.HashMap實際上是一個“連結串列雜湊”的資料結構,即陣列和連結串列的結合體,(JDK1.8增加了紅黑樹部分,會將時間複雜度從O(n)降為O(logn))。

紅黑樹  即使負載因子和Hash演算法設計的再合理,也免不了會出現拉鍊過長的情況,一旦出現拉鍊過長,則會嚴重影響HashMap的效能。於是,在JDK1.8版本中,對資料結構做了進一步的優化,引入了紅黑樹。而當連結串列長度太長(預設超過8)時,連結串列就轉換為紅黑樹,利用紅黑樹快速增刪改查的特點提高HashMap的效能,其中會用到紅黑樹的插入、刪除、查詢等演算法。

二、HashSet

HashSet中的資料不是key-value鍵值對,其只是單值,雖然其藉助與HashMap來實現,但是其只是將值作為key來存入HashMap中,因為HashMap中的值是key-value鍵值對的,所以每個HashSet儲存到HashMap的資料對應的value值只是一個new Object()物件,

三、TreeMap

TreeMap 是一個有序的key-value集合,它是通過紅黑樹實現的。  TreeMap 繼承於AbstractMap,所以它是一個Map,即一個key-value集合。  TreeMap 實現了NavigableMap介面,意味著它支援一系列的導航方法。比如返回有序的key集合。  TreeMap 實現了Cloneable介面,意味著它能被克隆。

TreeMap基於紅黑樹(Red-Black tree)實現。該對映根據其鍵的自然順序(字母排序)進行排序,或者根據建立對映時提供的 Comparator 進行排序,具體取決於使用的構造方法。  TreeMap的基本操作 containsKey、get、put 和 remove 的時間複雜度是 log(n)

 。  TreeMap是非執行緒安全的。 它的iterator 方法返回的迭代器是fail-fast的。

HashMap TreeMap
遍歷出來資料無序 自然排序或者建立對映提供的Comparator 進行排序
基於散列表 紅黑樹
取值速度快 取值速度慢
適用於在Map中插入、刪除和定位元素 適用於按自然順序或自定義順序遍歷鍵(key)