日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
HashMap加載因子為什么是0.75?轉(zhuǎn)化紅黑樹閾值為8?

正文

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、西城網(wǎng)站維護(hù)、網(wǎng)站推廣。

加載因子是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿的一種尺度,它衡量的是一個(gè)散列表的空間的使用程度,負(fù)載因子越大表示散列表的裝填程度越高,反之愈小。

對(duì)于使用鏈表法的散列表來(lái)說(shuō),查找一個(gè)元素的平均時(shí)間是 O(1+a)。因此如果負(fù)載因子越大,對(duì)空間的利用更充分,然而后果是查找效率的降低;如果負(fù)載因子太小,那么散列表的數(shù)據(jù)將過(guò)于稀疏,對(duì)空間造成嚴(yán)重浪費(fèi)。

如果你看過(guò)源代碼,你會(huì)發(fā)現(xiàn)在初始條件下,HashMap 在時(shí)間和空間兩者間折中選擇了 0.75

 
 
 
 
  1. /** 
  2. * The load factor used when none specified in constructor. 
  3. */ 
  4.  
  5. static final float DEFAULT_LOAD_FACTOR = 0.75f; 

但是為什么一定是 0.75?而不是 0.8,0.6,這里有一個(gè)非常重要的概念:泊松分布。

相信大家都學(xué)過(guò)概率論,對(duì)這個(gè)大名鼎鼎的定律感覺應(yīng)該是既熟悉又陌生。本篇文章的重點(diǎn)不是為大家普及概率論知識(shí),這里就簡(jiǎn)單介紹下。

泊松分布是最重要的離散分布之一,它多出現(xiàn)在當(dāng)X表示在一定的時(shí)間或空間內(nèi)出現(xiàn)的事件個(gè)數(shù)這種場(chǎng)合。

舉個(gè)簡(jiǎn)單的例子,假如你一個(gè)老板,新開張了一家酒店,這個(gè)時(shí)候應(yīng)該如何準(zhǔn)備一天所用的食材呢?

準(zhǔn)備的太多,最后賣不掉這么多菜只能浪費(fèi)扔掉;準(zhǔn)備不夠,又接不了生意。但是你有很多同行和朋友,他們會(huì)告訴你很多經(jīng)驗(yàn)。

比如把一天分成幾個(gè)時(shí)間段,上午、下午、晚上每個(gè)時(shí)間段大概會(huì)來(lái)多少個(gè)客人,每一桌大概會(huì)點(diǎn)幾個(gè)菜。綜合下來(lái),就可以大致知道在一天的時(shí)間內(nèi),估計(jì)出需要準(zhǔn)備的食材數(shù)量。

我們接下來(lái)看看 HashMap 源碼注釋的原話:

Ideally, under random hashCodes, the frequency of nodes in bins follows a Poisson distribution with a parameter of about 0.5 on average for the default resizing threshold of 0.75, although with a large variance because of resizing granularity. Ignoring variance, the expected occurrences of list size k are (exp(-0.5) * pow(0.5, k) /factorial(k)).

0: 0.60653066
1: 0.30326533
2: 0.07581633
3: 0.01263606
4: 0.00157952

5: 0.0001579

6: 0.00001316

7: 0.00000094

8: 0.00000006 

more: less than 1 in ten million

翻譯過(guò)來(lái)說(shuō)的是,在理想情況下,使用隨機(jī)哈希碼,節(jié)點(diǎn)出現(xiàn)的頻率在 hash 桶中遵循泊松分布。

對(duì)照桶中元素個(gè)數(shù)和概率的表,可以看到當(dāng)用 0.75 作為加載因子時(shí),桶中元素到達(dá) 8 個(gè)的時(shí)候,概率已經(jīng)變得非常小,因此每個(gè)碰撞位置的鏈表長(zhǎng)度超過(guò) 8 個(gè)是幾乎不可能的,因此在鏈表節(jié)點(diǎn)到達(dá) 8 時(shí)才開始轉(zhuǎn)化為紅黑樹。

本文轉(zhuǎn)載自微信公眾號(hào)「程序員大帝」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序員大帝公眾號(hào)。


分享標(biāo)題:HashMap加載因子為什么是0.75?轉(zhuǎn)化紅黑樹閾值為8?
當(dāng)前鏈接:http://m.5511xx.com/article/dpgojhe.html