【发布时间】:2014-12-15 21:42:36
【问题描述】:
一项任务已设置为在自定义哈希表中使用递归方法来查找数组中的下一个可用位置来存储键和值。
从 startPos(key 的哈希值)开始,每次递增 stepNo 为了跟踪这个地方,如果它被占用,我有一种方法可以根据探针类型/到目前为止所采取的步骤数找到下一个位置。出于某种原因,我遇到了溢出错误。
private int findEmpty(int startPos, String key, int stepNum) {
if(arr[startPos] == null)
return startPos;
int next = getNextLocation(startPos, stepNum++, key);
findEmpty( next ,key, stepNum);
return startPos;
}
下面的方法根据探测类型查找下一个要检查的位置,它采用 startPos(键的散列值)、stepNo(跟踪散列后放置的步骤)和键本身。
private int getNextLocation(int startPos, int stepNum, String key) {
int step = startPos;
switch (probeType) {
case LINEAR_PROBE:
step++;
break;
case DOUBLE_HASH:
step += doubleHash(key);
break;
case QUADRATIC_PROBE:
step += stepNum * stepNum;
break;
default:
break;
}
return step % max;
}
感谢任何建议或批评。
【问题讨论】:
-
你试过调试吗?您可以在
findEmpty的开头打印实际参数,这样您就会知道它为什么不能正确退出。