2013-04-11 50 views
3

我有一個關於計算散列表加載的問題。所以哈希表中存在的對象的數量。我知道當哈希表數組中有超過60%的對象時,效率會降低。找到加載的散列表

添加我的「添加」方法,所以你可以看到如何即時添加對象到哈希表。 出於某種原因,如0

class MyHashTable<T>{ 
private T[]values; 
private int size; 
//hash table size increases 10^n 
public MyHashTable(){ 
    size = 0; 
    values = (T[])(new Object[10]); 
} 
public void add(T object){ 
    size = values.length; 
    //checks if the # of stuff in the array is over 60% 
    //expand if true 
    if ((size+10)/size > 0.6){ 
     size*=2; 
     T[]tmp = (T[]) (new Object[size]); 
     for(int i=0; i<size/10; i++){ 
      if (values[i]!=null){ 
       add(values[i],tmp); 
      } 
     } 
     values = tmp; 
    } 
    add(object, values); 
} 

public void add(T object, T[]values){ 
    int location = Math.abs(object.hashCode())%values.length; 
    while(values[location]!=null){ 
     location = (location+1)%values.length; 
    } 
    //System.out.println(object.hashCode()); 
    values[location] = object; 
} 
public int getLoad(){ 
    int load = 0; 
    int location = 0; 
    while(values[location]!=null){ 
     load+=1; 
     location = (location+1)%values.length; 
    } 
    return load; 
} 

回答

0

我認爲這個問題是在你的add(T object)方法負載總是返回。 您首先檢查負載係數

//checks if the # of stuff in the array is over 60% 
//expand if true 
if ((size+10)/size > 0.6){ 
.... 

這裏有兩個問題。

這個計算結果可能false唯一的辦法是,當大小爲負。

假設size = 10 然後size +10/size = 20/10 = 2

這大概是這行代碼

另一個問題的無意圖的是,這是一個整數除法,這將返回一個整數。你必須做除法的回報獲得double前投用1.0sizedouble或乘法。