2013-04-29 127 views
0
public void put(int key, int value) { 
     int hash = (key % TABLE_SIZE); 
     if (table[hash] == null) 
      table[hash] = new LinkedHashEntry(key, value); 
     else { 
      LinkedHashEntry entry = table[hash]; 
      while (entry.getNext() != null && entry.getKey() != key) 
       entry = entry.getNext(); 
      if (entry.getKey() == key) 
       entry.setValue(value); 
      else 
       entry.setNext(new LinkedHashEntry(key, value)); 
     } 
    } 

我剛剛學習哈希錶鏈接的概念,我想如果我們添加一個新項目。我們將看看該項目的密鑰是否存在,如果是的話,我們只需將它鏈接到具有相同密鑰的同一個節點上。但只是在Hash錶鏈接標題下在線找到這些代碼,但它沒有做到我所期望的到。它要麼我錯了或該代碼。此部分混淆了我最:哈希錶鏈接

if (entry.getKey() == key) 
       entry.setValue(value); 

這是要幹什麼因爲它做什麼開放地址散列。你只用更換舊節點相同新的。只需要一個完整的定義,例如散列表和哈希錶鏈接及其差異。

謝謝,

+0

此代碼看起來正確。您提到的這一行使用現有節點並覆蓋該值,這是正確的。您能否更具體地瞭解您的困惑? – raptortech97 2013-04-29 23:32:15

+0

鏈接中不同的部分是'else'的情況。 – 2013-04-29 23:35:29

回答

0

哈希錶鏈是一種哈希表的實現。它用於減少哈希散列衝突。例如,名爲A的哈希值的項目是100,另一個項目已經存在於表格[100]上。要輸入項目A,在開放地址散列的情況下,項目A將在表格中插入索引101,這將增加散列衝突的可能性(如果未來另一項目的散列值爲101)。而哈希錶鏈不會。