阅读关于 跳跃式哈希 的内容并试图理解如何进行编码,我意识到在线性探测哈希表变体中,我们需要采用递归方法来调整大小,具体步骤如下:
创建现有桶的备份数组
分配所需容量的新数组
- 遍历备份数组,并重新哈希每个元素以获取元素在新数组中的新位置,并将其插入新数组中
- 完成后释放备份数组
代码结构应该如下:
public V put(Object key, Object value) {
//code
//we need to resize)
if(condition){
resize(2*keys.length);
return put(key, value);
}
//other code
}
private void resize(int newCapacity) {
//step 1
//step 2
//go over each element
for(Object key:oldKeys) {
put(key, value);
}
}
我不喜欢这种结构,因为我们在调整大小时会递归调用put函数。
使用线性探测变体时,这是调整哈希表大小的标准方法吗?
new Object [Integer.MAX_VALUE]
,如果堆空间未正确配置,则会出现OOM,2)您将无法再向表中插入任何内容,并且从调整大小循环中找出这一点似乎有点奇怪。但这影响的是闭合寻址思想,而不是答案,我认为这非常启发人。 - Cratylus