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
相关产品推荐
相关产品推荐

