2014-10-01 29 views
0

我對HashMap JDK實現的理解是,要放入HashMap存儲桶的Entry對象的Key用於在HashMap對象的Entry []表字段中查找一個位置。 如果是這樣的話,爲什麼這個散列碼用作for循環的起點?如果在基於計算的密鑰哈希的預期位置未找到條目,則循環訪問Entry對象數組的基本原理是什麼?集合框架的HashMap.put(Entry k)實現中for循環的目的是什麼?

OpenJDK的這種方法的代碼如下。

public V put(K key, V value) { 
      if (key == null) 
       return putForNullKey(value); 
      int hash = hash(key.hashCode()); 
      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 n 
+0

存儲桶是鏈接列表。 – 2014-10-01 15:23:02

+0

http://stackoverflow.com/questions/6493605/how-does-a-hashmap-work-in-java – 2014-10-01 15:45:07

回答

2

這就是哈希表如何處理哈希碰撞。可以有多個哈希碼映射到同一個存儲桶的對象。每個桶都包含一個鏈接的對象列表。

相關問題