溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中HashMap的key為null如何解決

發(fā)布時(shí)間:2021-02-03 19:27:34 來(lái)源:億速云 閱讀:633 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

Java中HashMap的key為null如何解決?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

在put方法里頭,其實(shí)第一行就處理了key=null的情況。

// HashMap的put方法
 public V put(K key, V value) {
    if (table == EMPTY_TABLE) {
      inflateTable(threshold);
    }
    if (key == null)
       // key為null調(diào)用putForNullKey(value)
       return putForNullKey(value);
    int hash = hash(key);
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
      Object k;
      if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
        V oldValue = e.value;
        e.value = value;
        e.recordAccess(this);
        return oldValue;
      }
    }
 
    modCount++;
    addEntry(hash, key, value, i);
    return null;
  }
 /**
   * Offloaded version of put for null keys
   */
  private V putForNullKey(V value) {
    for (Entry<K,V> e = table[0]; e != null; e = e.next) {
      if (e.key == null) {
        V oldValue = e.value;
        e.value = value;
        e.recordAccess(this);
        return oldValue;
      }
    }
    modCount++;
    addEntry(0, null, value, 0);
    return null;
  }

當(dāng)HashMap的put方法,第二個(gè)判斷就是key為null的判斷后進(jìn)入putForNullKey(V value)這個(gè)方法

可以看到,前面那個(gè)for循環(huán),是在talbe[0]鏈表中查找key為null的元素,如果找到,則將value重新賦值給這個(gè)元素的value,并返回原來(lái)的value。

如果上面for循環(huán)沒(méi)找到則將這個(gè)元素添加到talbe[0]鏈表的表頭。

看完上述內(nèi)容,你們掌握J(rèn)ava中HashMap的key為null如何解決的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI