成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

HashMap容量和負(fù)載因子使用說(shuō)明-創(chuàng)新互聯(lián)

HashMap底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組+鏈表,JDK1.8中還引入了紅黑樹(shù),當(dāng)鏈表長(zhǎng)度超過(guò)8個(gè)時(shí),會(huì)將鏈表轉(zhuǎn)成紅黑樹(shù),以提升其查找性能。

創(chuàng)新互聯(lián)建站是一家專(zhuān)業(yè)提供騰沖企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站制作、成都做網(wǎng)站、H5建站、小程序制作等業(yè)務(wù)。10年已為騰沖眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

那么,給出一個(gè)<key, value>節(jié)點(diǎn),HashMap是如何確定這個(gè)節(jié)點(diǎn)應(yīng)該放在具體哪個(gè)位置呢?(以JDK1.8為例)

final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
  Node<K,V>[] tab; Node<K,V> p; int n, i;
  // HashMap沒(méi)有被初始化,則先進(jìn)行初始化
  if ((tab = table) == null || (n = tab.length) == 0)
    n = (tab = resize()).length;
  // 節(jié)點(diǎn)所在index = (n - 1) & hash,該位置沒(méi)有數(shù)據(jù),則直接將新節(jié)點(diǎn)放在數(shù)組的index位置上
  if ((p = tab[i = (n - 1) & hash]) == null)
    tab[i] = newNode(hash, key, value, null);
  else { // index上已經(jīng)有節(jié)點(diǎn)了
    Node<K,V> e; K k;
    // 如果新key與原來(lái)的key一樣,則e指向原節(jié)點(diǎn)p(后面會(huì)用新value替換e所指向的value)
    if (p.hash == hash &&
      ((k = p.key) == key || (key != null && key.equals(k)))) 
      e = p;
    // 如果該節(jié)點(diǎn)是樹(shù)節(jié)點(diǎn),則采用樹(shù)的插入算法,插入新節(jié)點(diǎn)
    else if (p instanceof HashMap.TreeNode)
      e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
    else { // 該節(jié)點(diǎn)是鏈表節(jié)點(diǎn)
      for (int binCount = 0; ; ++binCount) {
        // 將新節(jié)點(diǎn)插入到index所在鏈表的末端
        if ((e = p.next) == null) {
          p.next = newNode(hash, key, value, null);
          // 鏈表節(jié)點(diǎn)超過(guò)8個(gè),則進(jìn)行鏈表轉(zhuǎn)樹(shù)處理
          if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
            treeifyBin(tab, hash);
          break;
        }
        // 同樣的,如果key已經(jīng)存在的話(huà),則不進(jìn)行插入操作,而是后面進(jìn)行value替換
        if (e.hash == hash &&
          ((k = e.key) == key || (key != null && key.equals(k))))
          break;
        p = e;
      }
    }
    // e != null的情況,就是key已經(jīng)存在了,這里統(tǒng)一進(jìn)行了新值value,替換舊值e.value的操作
    if (e != null) { // existing mapping for key
      V oldValue = e.value;
      if (!onlyIfAbsent || oldValue == null)
        e.value = value;
      afterNodeAccess(e);
      return oldValue;
    }
  }
  ++modCount;
  // 插入后數(shù)組size 大于閾值的話(huà),需要進(jìn)行擴(kuò)容
  if (++size > threshold)
    resize();
  afterNodeInsertion(evict);
  return null;
}

網(wǎng)站標(biāo)題:HashMap容量和負(fù)載因子使用說(shuō)明-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://jinyejixie.com/article2/ccepoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站小程序開(kāi)發(fā)、定制網(wǎng)站、電子商務(wù)微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
新干县| 葵青区| 阿坝县| 阿巴嘎旗| 应用必备| 冷水江市| 明星| 阜阳市| 陕西省| 永川市| 朝阳市| 阳泉市| 锡林浩特市| 新泰市| 东至县| 丰宁| 高清| 博白县| 巴东县| 万宁市| 芦溪县| 宜兰县| 南乐县| 体育| 冷水江市| 唐山市| 海宁市| 长顺县| 拜泉县| 清涧县| 辽宁省| 新乡市| 蕲春县| 尼勒克县| 庄河市| 嵊州市| 栖霞市| 阆中市| 江城| 香格里拉县| 漳平市|