You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinearProbingHashTable扩容方法代码错误修复求助

修复线性探测哈希表扩容方法的两个常见错误

在实现LinearProbingHashTable的expand方法时,复制元素到新数组阶段容易出现以下两个错误,以下是对应的修复方案:

错误1:调用hashFunc时传入Entry对象而非int类型key

错误代码示例

Entry tempEntry = oldTable[i];
int newIndex = hashFunc(tempEntry); // 参数类型不匹配:hashFunc预期int类型key,实际传入Entry

修复方案

从Entry实例中提取对应的int类型key,再传入哈希函数:

Entry tempEntry = oldTable[i];
if (tempEntry != null) {
    int newIndex = hashFunc(tempEntry.getKey()); // 传入Entry的key属性
}

错误2:将Entry对象与int值0比较导致类型不兼容

错误代码示例

if (oldTable[i] == 0) { // 类型不兼容:Entry无法直接和int值0比较
    // 跳过空槽逻辑
}

修复方案

哈希表的空槽通常用null表示,直接判断Entry是否为null即可:

if (oldTable[i] == null) { // 判断槽位是否为空
    continue; // 跳过空槽,无需处理
}

修复后的完整expand方法片段(Java实现)

private void expand() {
    Entry[] oldTable = this.table;
    // 扩容为原容量的2倍,符合哈希表扩容的常规策略
    this.table = new Entry[oldTable.length * 2];

    for (int i = 0; i < oldTable.length; i++) {
        Entry currentEntry = oldTable[i];
        if (currentEntry == null) {
            continue;
        }
        // 获取当前元素的key,计算新哈希索引
        int targetIndex = hashFunc(currentEntry.getKey());
        // 线性探测寻找空槽
        while (this.table[targetIndex] != null) {
            targetIndex = (targetIndex + 1) % this.table.length;
        }
        this.table[targetIndex] = currentEntry;
    }
}

内容的提问来源于stack exchange,提问作者Zaineb Othman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:35:16