【发布时间】:2017-04-12 21:41:22
【问题描述】:
我正在为我的数据结构类创建自己的哈希表 adt,但遇到了问题。我使用以下函数对哈希表中的(键,值)条目进行哈希处理(键是字符串,值可以是任何数据类型,它是通用的):
private int hashCode(String key)
{
final int constant = 37;
int hash = 0;
for(int i=0;i<key.length();i++)
{
hash+=(int)key.charAt(i) * Math.pow(constant,i);
}
return hash;
}
private int hash(String key)
{
return hashCode(key) % capacity
}
使用线性探测插入到表中工作正常,但是如果我选择扩展表,hash(key) 函数将无法充分用于哈希表的 get(key) 操作,因为容量已经改变(在正确映射表扩展之前,它将映射到不正确的位置)。有没有什么简单的方法可以编辑它,它考虑到哈希表的扩展,假设是两倍。即:如果 loadfactor > 0.5 将表增加 2* 容量。
【问题讨论】:
-
在调整数组大小后重新散列所有键是一种常见的做法。您可能需要查看您的教科书,以更深入地了解它是如何完成的。
标签: java data-structures hash hashtable