亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HashMap 在內部檢查兩個鍵是否相等,正在使用哪種算法?

HashMap 在內部檢查兩個鍵是否相等,正在使用哪種算法?

鴻蒙傳說 2021-06-07 13:42:07
hashcode() 方法生成對象的哈希碼,這有助于識別準確的桶/索引。假設在這個存儲桶(索引)中已經存在很少的鍵值對,那么應該將要插入的鍵與所有當前鍵進行比較。這里使用哪種算法來搜索密鑰?
查看完整描述

2 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

它將對HashMap的條目集執行線性搜索。它將通過查看您的key(by hash)來獲取條目集,然后逐個迭代條目集(您的多個鍵值對/對)并為您檢查正確的鍵。


這是實現


public V get(Object key) {


    if (key == null)

        return getForNullKey();

    int hash = hash(key.hashCode());


    for (Entry<K,V> e = table[indexFor(hash, table.length)];e != null;e = e.next) {

         Object k;

         if (e.hash == hash && ((k = e.key) == key || key.equals(k)))

             return e.value;

         }

     }

     return null;

 }


查看完整回答
反對 回復 2021-06-10
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

如果我沒記錯我的老師;

正如您所說,JavasHashMap<K,V>使用hashcode(繼承自Object,最好由您的鍵覆蓋)來定位它應該在底層結構中存儲鍵值對的位置。

如果<K,V>同一位置存在多個對,則調用get(K k)將使用您的 keysboolean equals(Object o)方法來確定您想要哪個(也由 繼承Object),或者調用put將使用相同的技術來確定用您的新值替換哪個值一。

然而,它將首先檢查參考。如果您的密鑰和 hasmap 中的一個存儲相同,則不會使用equals.


查看完整回答
反對 回復 2021-06-10
  • 2 回答
  • 0 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號