重新调整哈希表的大小

时间:2013-12-04 04:03:44

标签: java hashtable

我正在尝试重新调整hash table的大小。我发现我的逻辑是正确的,但代码是完全错误的。我知道在向哈希表中添加元素时,必须考虑load factor,如果超出load factor,则容量会增加一倍。

实施例。 Size = 3, Capacity = 5
Load Factor = 5 * 0.75 = 3.75
如果我们添加的元素Size = 4超过load factor,那么Capacity = 10。 但是,我将返回原始Capacity

/**
* size if load >.75 or < .5
*/
private void resize(int newCap)
{
  //   
   double capacity = buckets.length * 0.75;
   //System.out.println(capacity);
   if (currentSize > capacity) {
       int C = buckets.length * 2;
       newCap = C
       //System.out.println(C);
   }
}

/**
 * Gets the length of the array backing this HashSet
 * @return the length of the array backing this HashSet
 */
public int getCap()
{
  //
   int capac = buckets.cap
   resize(capac);
   return capac;
}

1 个答案:

答案 0 :(得分:0)

方法newCap = C中的

resize不会更改capac

的值

您应该从newCap方法

返回resize
/**
* size if load >.75 or < .5
*/
private int resize(int newCap)
{
  //   
   double capacity = buckets.length * 0.75;
   //System.out.println(capacity);
   if (currentSize > capacity) {
       int C = buckets.length * 2;
       return C;
       //System.out.println(C);
   }
   return newCap;
}

/**
 * Gets the length of the array backing this HashSet
 * @return the length of the array backing this HashSet
 */
public int getCap()
{
  //
   int capac = buckets.cap;
   capac = resize(capac);
   return capac;
}

在java中,总是存在pass-by-value。请参阅相关讨论here

编辑:更改了正确指出的返回类型。