新聞中心
? 前幾天,有一位粉絲在直播間問了我這樣一個問題,說HashMap和TreeMap有什么區(qū)別。今天,我給大家分享一下我的理解。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)福田免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1、兩者區(qū)別
我們知道不管是HashMap還是TreeMap,都是通過對象來對對象進(jìn)行索引的Map集合。我們把用來索引的對象叫做Key,而索引對應(yīng)的對象叫做Value。這就是我們平時說的鍵值對。它們的類關(guān)系如圖所示:
關(guān)于HashMap和TreeMap的區(qū)別,我從以下4個方面來分析:
1)數(shù)據(jù)結(jié)構(gòu)方面
HashMap是基于哈希表+數(shù)組來實(shí)現(xiàn)的,而TreeMap是基于紅黑樹實(shí)現(xiàn)的。
使用HashMap需要鍵對象明確定義了hashCode()和equals()這兩個方法,而且為了優(yōu)化HashMap空間的使用,可以調(diào)整初始容量大小和擴(kuò)容。
TreeMap沒有大小設(shè)置選項(xiàng),因?yàn)椋t黑樹結(jié)構(gòu)總是處于平衡狀態(tài)。
2)效率方面
HashMap比TreeMap的性能更高。
HashMap的時間復(fù)雜度是O(1),它是通過哈希函數(shù)計(jì)算的哈希地址。
而TreeMap主要是保證數(shù)據(jù)平衡,時間復(fù)雜度是O(log2 n)。
3)線程安全方面
HashMap和TreeMap都是非線程安全的。
如果在多線程并發(fā)情況下建議使用ConcurrentHashMap;
如果既要保證線程安全又要保證順序,可以使用 Collections.synchronizedMap()方法轉(zhuǎn)化為線程安全的集合。
4)應(yīng)用場景方面
HashMap是無序的,而TreeMap是有序的。
TreeMap適用于按自然順序或自定義順序遍歷鍵的場景。
HashMap適用于在Map中插入、刪除和定位元素。
日常開發(fā)建議多使用HashMap,只有在需要排序的時候才使用TreeMap。
2、總結(jié)
最后,我把HashMap和TreeMap的更多詳細(xì)區(qū)別,都整理在這張表中了,需要的小伙伴可以在我的個人主頁中獲取。
|
基礎(chǔ) |
哈希圖 |
樹狀圖 |
|
Definition |
HashMap是基于哈希表的Map接口實(shí)現(xiàn)。 |
TreeMap是Map接口的基于Tree結(jié)構(gòu)的實(shí)現(xiàn)。 |
|
Interface Implements |
HashMap實(shí)現(xiàn)Map, Cloneable和Serializable接口。 |
TreeMap實(shí)現(xiàn)NavigableMap, Cloneable和Serializable接口。 |
|
空鍵/值 |
HashMap允許單個null鍵和多個null值。 |
TreeMap不允許使用空鍵, 但可以具有多個空值。 |
|
同質(zhì)/異質(zhì) |
HashMap允許異構(gòu)元素, 因?yàn)樗粚︽I執(zhí)行排序。 |
由于排序, TreeMap允許將齊次值作為鍵。 |
|
Performance |
HashMap比TreeMap更快, 因?yàn)樗鼮橹T如get()和put()之類的基本操作提供了O(1)的恒定時間性能。 |
與HashMap相比, TreeMap速度較慢, 因?yàn)樗鼮榇蠖鄶?shù)操作(如add(), remove()和contains())提供O(log(n))的性能。 |
|
數(shù)據(jù)結(jié)構(gòu) |
HashMap類使用哈希表。 |
TreeMap在內(nèi)部使用Red-Black樹, 這是一種自平衡二進(jìn)制搜索樹。 |
|
Comparison Method |
它使用Object類的equals()方法比較鍵。Map類的equals()方法將其覆蓋。 |
它使用compareTo()方法比較鍵。 |
|
Functionality |
HashMap類僅包含諸如get(), put(), KeySet()等基本功能。 |
TreeMap類具有豐富的功能, 因?yàn)樗缦鹿δ埽簍ailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry()。 |
|
元素順序 |
HashMap不維護(hù)任何順序。 |
元素以自然順序(升序)排序。 |
|
Uses |
當(dāng)我們不需要按排序順序的鍵值對時, 應(yīng)使用HashMap。 |
當(dāng)我們需要按排序(升序)順序的鍵值對時, 應(yīng)使用TreeMap |
好了,以上就是我對HashMap和TreeMap的理解。
網(wǎng)頁標(biāo)題:驚呆面試官的回答:HashMap和TreeMap的區(qū)別
當(dāng)前鏈接:http://fisionsoft.com.cn/article/cddijhs.html


咨詢
建站咨詢
