最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java  HashMap擴(kuò)容詳解及實(shí)例代碼

 更新時(shí)間:2017年02月17日 15:18:07   投稿:lqh  
這篇文章主要介紹了java HashMap擴(kuò)容詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下

HashMap擴(kuò)容

前言:

HashMap的size大于等于(容量*加載因子)的時(shí)候,會(huì)觸發(fā)擴(kuò)容的操作,這個(gè)是個(gè)代價(jià)不小的操作。

為什么要擴(kuò)容呢?HashMap默認(rèn)的容量是16,隨著元素不斷添加到HashMap里,出現(xiàn)hash沖突的機(jī)率就更高,那每個(gè)桶對(duì)應(yīng)的鏈表就會(huì)更長(zhǎng),

這樣會(huì)影響查詢的性能,因?yàn)槊看味夹枰闅v鏈表,比較對(duì)象是否相等,一直到找到元素為止。

為了提升查詢性能,只能擴(kuò)容,減少hash沖突,讓元素的key盡量均勻的分布。

擴(kuò)容基本點(diǎn)

加載因子默認(rèn)值是0.75

static final float DEFAULT_LOAD_FACTOR = 0.75f;

容量的默認(rèn)值是16

 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 等于16

HashMap提供了一個(gè)構(gòu)造參數(shù),可以在創(chuàng)建的時(shí)候指定容量和加載因子。

 public HashMap(int initialCapacity, float loadFactor)

默認(rèn)的情況下,HashMap 的size一旦大于等于16*0.75=12的話,

同時(shí)每個(gè)Entry(或者叫桶)里面至少有一個(gè)元素的時(shí)候就會(huì)進(jìn)行擴(kuò)容。

 if ((size >= threshold) && (null != table[bucketIndex])) {
      resize(2 * table.length);
      hash = (null != key) ? hash(key) : 0;
      bucketIndex = indexFor(hash, table.length);
}

擴(kuò)容的時(shí)候,容器容量翻倍

 resize(2 * table.length);

擴(kuò)容的時(shí)候需要重新計(jì)算元素的數(shù)組下標(biāo)

1、重新分配一個(gè)新的Entry數(shù)組
2、重新計(jì)算原來元素的在新數(shù)組中的下標(biāo)(比較耗資源)

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

相關(guān)文章

最新評(píng)論

茌平县| 鄂托克前旗| 武汉市| 博白县| 苏尼特左旗| 盱眙县| 苗栗县| 泊头市| 扎兰屯市| 锦州市| 武陟县| 北流市| 临西县| 永平县| 樟树市| 唐河县| 濮阳市| 沙河市| 洞口县| 宁津县| 诏安县| 巴楚县| 乐安县| 扬中市| 尖扎县| 北碚区| 内丘县| 天峨县| 池州市| 奉节县| 察哈| 曲水县| 河东区| 弋阳县| 腾冲县| 四子王旗| 谷城县| 沽源县| 集贤县| 板桥市| 大同市|