HashMap和TreeMap對比

HashMap主要用來存放鍵值對,它基於哈希表的Map接口實現,是常用的Java集合之一,數據是無序的

jdk1.8在解決哈希衝突時有了較大的變化,當鏈表長度大於閾值(默認爲8)時,將鏈表轉化爲紅黑樹,以減少搜索時間。

HashMap

JDK1.8 之前 HashMap 由 數組+鏈表 組成的,數組是 HashMap 的主體,鏈表則是主要爲了解決哈希衝突而存在的.

HashMap的時間複雜度O(1),但是如果衝突較多,鏈表的時間複雜度是O(n),所以在JDK1.8 以後,當鏈表長度大於閾值(默認爲 8)時,將鏈表轉化爲紅黑樹,以減少搜索時間,紅黑樹的時間複雜度是O(log n)。 所以查詢一個HashMap數據的時間爲 O(1) + O(n)或O(1) + O(log n) 平均爲O(1)

總結:HashMap根據鍵的HashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度,插入、刪除和定位元素,HashMap是最好的選擇。

TreeMap

TreeMap是基於紅黑樹實現的一個保證有序性的Map 基於紅黑樹,所以TreeMap的時間複雜度是O(log n),如果需要有排序的數據,直接存放進TreeMap中就行,TreeMap自己會給排序,不需要再寫排序代碼。

總結:TreeMap取出來的是排序後的鍵值對。插入、刪除需要維護平衡會犧牲一些效率。但如果要按自然順序或自定義順序遍歷,那麼TreeMap會更好。

HashMap通過hashcode對其內容進行快速查找,而 TreeMap中所有的元素都保持着某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap。HashMap通常比TreeMap效率要高一些,一個是哈希表,一個是二叉樹,建議多使用HashMap,在需要排序的Map時候才用TreeMap。HashMap的查詢速度比TreeMap要快

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章