我正在尝试重新调整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;
}
答案 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
编辑:更改了正确指出的返回类型。