日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hashtable、HashMap、TreeMap总结

發(fā)布時(shí)間:2025/3/12 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hashtable、HashMap、TreeMap总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hashtable、HashMap、TreeMap總結(jié)



三者均實(shí)現(xiàn)了Map接口,存儲(chǔ)的內(nèi)容是基于key-value的鍵值對(duì)映射,一個(gè)映射不能有重復(fù)的鍵,一個(gè)鍵最多只能映射一個(gè)值。

(元順初線)


(1) 元素特性
HashTable中的key、value都不能為null;HashMap中的key、value可以為null ,很顯然只能有一個(gè)key為null的鍵值對(duì),但是允許有多個(gè)值為null的鍵值對(duì); TreeMap中當(dāng)未實(shí)現(xiàn) Comparator 接口時(shí),key 不可以為null;當(dāng)實(shí)現(xiàn) Comparator 接口時(shí),若未對(duì)null情況進(jìn)行判斷,則key不可以為null,反之亦然。

(2)順序特性
HashTable、HashMap具有無序特性 TreeMap是利用紅黑樹來實(shí)現(xiàn)的(樹中的每個(gè)節(jié)點(diǎn)的值,都會(huì)大于或等于它的左子樹種的所有節(jié)點(diǎn)的值,并且小于或等于它的右子樹中的所有節(jié)點(diǎn)的值 ),實(shí)現(xiàn)了SortMap接口,能夠?qū)Ρ4娴挠涗浉鶕?jù)鍵進(jìn)行排序。所以一般需要排序的情況下是選擇TreeMap來進(jìn)行,默認(rèn)為升 序排序方式(深度優(yōu)先搜索) ,可自定義實(shí)現(xiàn)Comparator接口實(shí)現(xiàn)排序方式。

(3)初始化與增長(zhǎng)方式
初始化時(shí): HashTable在不指定容量的情況下的默認(rèn)容量為11 ,且不要求底層數(shù)組的容量一定要為 2的整數(shù)次冪 HashMap 默認(rèn)容量為 16 ,且要求容量一定為 2的整數(shù)次冪
擴(kuò)容時(shí): Hashtable將容量變?yōu)樵瓉淼?倍加1;HashMap擴(kuò)容將容量變?yōu)樵瓉淼?倍。

(4)線程安全性

HashTable其 方法函數(shù)都是同步 的(采用synchronized修飾),不會(huì)出現(xiàn) 兩個(gè)線程同時(shí)對(duì)數(shù)據(jù) 進(jìn)行操作的情況,因此保證了線程安全性。也正因?yàn)槿绱?#xff0c;在多線程運(yùn)行環(huán)境下效率表現(xiàn)非常低下。因?yàn)楫?dāng)一個(gè)線程訪問HashTable的同步方法時(shí),其他線程也訪問同步方法就會(huì) 進(jìn)入阻塞狀態(tài) 。比如當(dāng)一個(gè)線程在 添加數(shù)據(jù)時(shí)候 ,另外一個(gè)線程即使執(zhí) 行獲取其他數(shù)據(jù)的操作 也必須被阻塞,大大降低了程序的運(yùn)行效率,在新版本中已被廢棄,不推薦使用。
HashMap不支持線程的同步,即任一時(shí)刻可以有多個(gè)線程同時(shí)寫HashMap;可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。如果需要同步(1)可以用 Collections的 synchronizedMap 方法;(2)使用 ConcurrentHashMap 類, 相較于HashTable鎖住的是對(duì)象整體, ConcurrentHashMap基于lock實(shí)現(xiàn)鎖分段技術(shù) 。首先將Map存放的 數(shù)據(jù)分成一段一段的存儲(chǔ)方式 ,然后給每一段數(shù)據(jù) 分配一把鎖 ,當(dāng)一個(gè)線程占用鎖訪問其中一個(gè)段的數(shù)據(jù)時(shí),其他段的數(shù)據(jù)也能被其他線程訪問。ConcurrentHashMap不僅保證了多線程運(yùn)行環(huán)境下的數(shù)據(jù)訪問安全性,而且性能上有長(zhǎng)足的提升。

(5)一段話HashMap
HashMap基于哈希思想,實(shí)現(xiàn)對(duì)數(shù)據(jù)的讀寫。當(dāng)我們將鍵值對(duì)傳遞給put()方法時(shí),它調(diào)用鍵對(duì)象的hashCode()方法來計(jì)算hashcode,讓后找到bucket位置來儲(chǔ)存值對(duì)象。當(dāng)獲取對(duì)象時(shí),通過鍵對(duì)象的equals()方法找到正確的鍵值對(duì),然后返回值對(duì)象。HashMap使用鏈表來解決碰撞問題,當(dāng)發(fā)生碰撞了,對(duì)象將會(huì)儲(chǔ)存在鏈表的下一個(gè)節(jié)點(diǎn)中。 HashMap在每個(gè)鏈表節(jié)點(diǎn)中儲(chǔ)存鍵值對(duì)對(duì)象。當(dāng)兩個(gè)不同的鍵對(duì)象的hashcode相同時(shí),它們會(huì)儲(chǔ)存在同一個(gè)bucket位置的鏈表中,可通過鍵對(duì)象的equals()方法用來找到鍵值對(duì)。如果鏈表大小超過閾值(TREEIFY_THRESHOLD, 8),鏈表就會(huì)被改造為樹形結(jié)構(gòu)。

總結(jié)

以上是生活随笔為你收集整理的Hashtable、HashMap、TreeMap总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。