一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - HashMap和Hashtable的詳細(xì)比較

HashMap和Hashtable的詳細(xì)比較

2020-09-21 17:10仰望天空 Java教程

這篇文章主要介紹了HashMap和Hashtable的詳細(xì)比較的相關(guān)資料,需要的朋友可以參考下

HashMap和Hashtable的詳細(xì)比較

前言:

可以直接根據(jù)hashcode值判斷兩個(gè)對(duì)象是否相等嗎?肯定是不可以的,因?yàn)椴煌膶?duì)象可能會(huì)生成相同的hashcode值。雖然不能根據(jù)hashcode值判斷兩個(gè)對(duì)象是否相等,但是可以直接根據(jù)hashcode值判斷兩個(gè)對(duì)象不等,如果兩個(gè)對(duì)象的hashcode值不等,則必定是兩個(gè)不同的對(duì)象。如果要判斷兩個(gè)對(duì)象是否真正相等,必須通過(guò)equals方法。

也就是說(shuō)對(duì)于兩個(gè)對(duì)象,如果調(diào)用equals方法得到的結(jié)果為true,則兩個(gè)對(duì)象的hashcode值必定相等;如果equals方法得到的結(jié)果為false,則兩個(gè)對(duì)象的hashcode值不一定不同;如果兩個(gè)對(duì)象的hashcode值不等,則equals方法得到的結(jié)果必定為false;如果兩個(gè)對(duì)象的hashcode值相等,則equals方法得到的結(jié)果未知。

HashMap和Hashtable不保證map的順序,也不保證順序不會(huì)隨著時(shí)間不變。

HashMap實(shí)例有兩個(gè)參數(shù)影響性能:初始capacity和load factor。capacity是hashtable中桶的數(shù)量,初始capacity就是hashtable創(chuàng)建時(shí)的capacity。load factor影響hashtable多滿(mǎn)時(shí)允許自動(dòng)增加capacity。當(dāng)hashtable中entry的數(shù)量超過(guò)load factor和當(dāng)前capacity的乘積,hashtable會(huì)重新哈希(意味著,內(nèi)部數(shù)據(jù)結(jié)構(gòu)重建)因此hashtable大約擁有桶數(shù)量的兩倍。

作為通用規(guī)則,默認(rèn)load factor(0.75)在時(shí)間和空間消耗上提供了好的權(quán)衡。值越大,空間開(kāi)銷(xiāo)越小,但是遍歷成本增加(表現(xiàn)在大多數(shù)操作,包括get和put)。當(dāng)設(shè)置初始capacity時(shí),為了最小化重新hash的操作次數(shù),應(yīng)該考慮map的entry數(shù)量和load factor。如果初始容量大于最大entry數(shù)量除以load factor,重新hash操作將不會(huì)發(fā)生。然而,設(shè)置初始capacity太大會(huì)浪費(fèi)空間。

如果許多mapping存儲(chǔ)在HashMap實(shí)例中,創(chuàng)建時(shí)使用足夠大的capacity將允許mapping存儲(chǔ)得更有效率,因?yàn)椴粫?huì)隨著table的數(shù)量增大重新hash。注意使用許多相同hashCode()的key肯定會(huì)降低任意hashtable的性能。

二.相同點(diǎn)

 

DEFAULT_LOAD_FACTOR

0.75

TREEIFY_THRESHOLD

8

UNTREEIFY_THRESHOLD

6

MIN_TREEIFY_CAPACITY

否則resize()

64

size

mapping數(shù)量

threhold

capacity*load factor

 

三.不同點(diǎn)

 


HashMap

Hashtable

線程安全

不安全

安全

允許null的鍵和值

允許

不允許

實(shí)現(xiàn)和繼承

實(shí)現(xiàn)Map

實(shí)現(xiàn)Map,繼承Dictionary

遍歷方式

Iterator

Iterator和Enumeration

計(jì)算哈希值

(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)

(key.hashCode() & 0x7FFFFFFF)

計(jì)算數(shù)組下標(biāo)

(length - 1) & hash

hash % length

DEFAULT_INITIAL_CAPACITY

16

11

容量增加方式

old*2

長(zhǎng)度始終為2的冪

old*2+1

構(gòu)造函數(shù)

threshold=tableSizeFor(initialCapacity)

threhold=initialCapacity*load factor

resize

從0-cap

鏈表順序不變

從cap-0

鏈表順序相反

 

 計(jì)算數(shù)組下標(biāo):當(dāng)length總是2的n次方時(shí),h&(length-1)運(yùn)算等價(jià)于對(duì)length取模,也就是h%length,但是&比%具有更高的效率。

容量增加方式:當(dāng)數(shù)組長(zhǎng)度為2的n次冪的時(shí)候,不同的key算得的index相同的幾率較小,那么數(shù)據(jù)在數(shù)組上分布就比較均勻,也就是說(shuō)碰撞的幾率小。相對(duì)的,查詢(xún)的時(shí)候就不用遍歷某個(gè)位置上的鏈表,這樣查詢(xún)效率也就較高了。導(dǎo)致resize()不同HashMap直接使用之前的數(shù)組下表,而Hashtable需要重新計(jì)算。

 感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

原文鏈接:http://www.cnblogs.com/tk55/p/6784962.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 毛片应用| 成人小视频在线观看免费 | 91污污视频 | 欧美日韩一区二区三区韩大 | 国产亚洲视频网站 | 亚洲性69影视 | 精品日本一区二区 | 午夜伦伦电影理论片大片 | www.5151淫| 精品久久久久久影院免费 | 亚洲 日韩经典 中文字幕 | 亚洲国产区男人本色在线观看欧美 | 男女激情网 | 免费观看一级一片 | 6080午夜 | 成人福利网 | 欧美聚众性派对hdsex | 精品国产日韩亚洲一区在线 | 国产精品成人在线播放 | 国产传媒在线播放 | 久久精品国产亚洲AV热无遮挡 | 日本视频一区在线观看免费 | 国产精品99爱免费视频 | 亚洲国产精品综合久久一线 | 91国在线观看 | 天天综合网天天做天天受 | 99福利视频导航 | 边吃胸边膜下刺激免费男对女 | 青青草在线观看 | 动漫美女被吸乳羞羞小说 | 九色PORNY蝌蚪视频首页 | 日本成熟老妇xxxx | 免费网址在线观看入口推荐 | 无人区尖叫之夜美女姐姐视频 | 国产福利片在线 易阳 | 91麻豆精品国产片在线观看 | 色多多多 | 国产一级持黄大片99久久 | 亚洲天堂男人 | 日韩理论在线观看 | 久久久久影视 |