Java哈希表调用Entrada.setKey报this.table[...]为null空指针异常
空指针异常成因
触发异常的核心原因是if分支的判断逻辑与后续操作冲突,结合Java的数组初始化特性,具体原因如下:
- 你在构造函数中执行
this.table= new Entrada [capacidad];仅创建了长度为100的Entrada类型数组,Java中对象类型的数组初始化后,每个元素的默认值都是null,不会自动生成对应类的实例 - 你的if判断条件为
if (table[(position + i * i) % capacidad] == null),即只有数组对应位置为空时才会进入分支,进入分支后你直接对这个null元素调用setKey方法,自然会触发空指针异常
修复方案
你可以根据业务需求选择以下两种方案:
方案1(适配哈希表插入场景,更推荐):空位置先创建实例再赋值
如果你的逻辑是找到空的哈希桶后插入新元素,修改代码如下:
// 提前计算下标避免重复计算 int index = (position + i * i) % capacidad; if (table[index] == null) { // 先创建Entrada实例再赋值 Entrada newEntry = new Entrada(); newEntry.setKey(clave); newEntry.setValue(valor); table[index] = newEntry; check = true; }
方案2:调整判断逻辑,仅修改已存在的元素
如果你的需求是修改已有哈希桶的内容,把if的判断条件取反即可:
int index = (position + i * i) % capacidad; if (table[index] != null) { table[index].setKey(clave); table[index].setValue(valor); check = true; }
内容的提问来源于stack exchange,提问作者Axitas
相关产品推荐
相关产品推荐

