2011-12-03 97 views
-1

試圖更好地理解哈希表上的鏈接。尋找一個簡單的表,其散列一個值,並且只將一個整數與散列值相關聯。這裏是有問題的問題的示例代碼...使用鏈接的快速哈希表

 /* hash string value return int */ 
     public int hashFunction(String D) { 
      char[] Thing = D.toCharArray(); 
      for(int i=0; i < Thing.length; i++){ 
      index += Thing[i]; } 
      return index % TABLE_SIZE;   
     } 

     /* hash string value return void */ 
     public void hashFunction(String D) { 
     char[] Thing = D.toCharArray(); 
     for(int i=0; i < Thing.length; i++){ 
     index += Thing[i];} 
     int hash = index % TABLE_SIZE; 
     if(table[hash] == null){ 
      table[hash] = new HashEntry(Level, Value); 
     }   
     else{ 
      table[hash].setNext(nd); 
     } 
     } 

     /* miscellaneous code snippet */ 
     if(table[hash] == null){ 
     table[hash] = new HashEntry(); 
     } 

     else if (Data.compareTo("VAR") == 0) { 
      Data = inFile.next(); 
      char[] Thing = Data.toCharArray(); 
      for(int i=0; i < Thing.length; i++){ 
      hash += Thing[i];} 
      hash = hash % TABLE_SIZE;   
      hm.setIntoHashTable(hash);  
       Data = inFile.next(); 
        if(Data.compareTo("=") == 0) { 
        Data = inFile.next(); 
        int value = Integer.parseInt(Data); 
        hm.getIntoHashTable(he.setValue(value)); 
       } 
     } 
+0

你可以創建'int generateHash(String D)'和'int insertIntoHashTable(String D)'。 'generateHash'是你的散列函數。 'insertIntoHashTable'將首先調用'generateHash',然後讓插入邏輯 – havexz

+0

可以更詳細地描述你的散列函數?什麼是「int level」,你在談論的是什麼? – havexz

+2

請不要在你的問題中大喊...... – Amy

回答

3

那麼鏈接發生時,當你有索引中的碰撞。

讓我們假設你有一個TABLE_SIZE = 10

現在你要存儲串abc,所以你得到的哈希爲4

現在,當你要去的存儲串cba,你最終得到相同的哈希4

因此,現在要將cba存儲在相同索引處,您將在索引4處創建並存儲一個列表。

該列表將包含abcbca。該列表被稱爲chain,並且在相同散列處存儲多個值的這個過程被稱爲Chaining

僞代碼的樣子:

if(table[hash] == null) 
    table[hash] = new ArrayList<HashEntry>();//APPEND ON TO THE LOCATION ALREADY THERE! 
table[hash].add(new HashEntry()); 

表將被宣佈爲:

@SuppressWarnings("unchecked") 
List<HashEntry>[] table = new List[TABLE_SIZE]; 

您可能需要抑制警告數組和仿製藥不順利。

+0

你能描述一下你的散列函數嗎?什麼是int級別,你在談論的是什麼? – havexz