Java 使用hashcode()模数返回数组的长度,但出现空指针异常
我尝试使用字符串的hashcode和数组长度的模来获取哈希表应该存储在哪里的索引。这就是我认为我把事情搞砸的地方: 数组声明和构造函数:Java 使用hashcode()模数返回数组的长度,但出现空指针异常,java,nullpointerexception,hashcode,Java,Nullpointerexception,Hashcode,我尝试使用字符串的hashcode和数组长度的模来获取哈希表应该存储在哪里的索引。这就是我认为我把事情搞砸的地方: 数组声明和构造函数: private Bucket[] list; public Hash() { list = new Bucket[8]; } 实际代码是: //if such a key exists already, you should replace its value public void insert(String key, Textbook valu
private Bucket[] list;
public Hash() {
list = new Bucket[8];
}
实际代码是:
//if such a key exists already, you should replace its value
public void insert(String key, Textbook value) {
rehash();
if(list[key.hashCode()%list.length].insert(key, value)) size++;
}
//checks if the key exists
public boolean contains(String key) {
return (list[key.hashCode()%list.length] != null) ? list[key.hashCode()%list.length].contains(key) : false;
}
public void remove(String key) {
if(list[key.hashCode()%list.length].remove(key)) size --;
}
insert和remove返回空指针,contains方法总是返回false
我做错了什么。
谢谢
不分配任何Bucket
对象,它只分配一个满null
值的数组
因此,list[key.hashCode()%list.length]==null
(解释为什么contains()
返回null
,并list[key.hashCode()%list.length]。删除(…)
或列表[key.hashCode()%list.length]。插入(…)
会导致您尝试访问null
,这反过来又会导致NPE)
您还必须使用Bucket
的构造函数或某些工厂方法,迭代数组并使用非空值初始化每个元素
不分配任何Bucket
对象,它只分配一个满null
值的数组
因此,list[key.hashCode()%list.length]==null
(解释为什么contains()
返回null
,并list[key.hashCode()%list.length]。删除(…)
或列表[key.hashCode()%list.length]。插入(…)
会导致您尝试访问null
,这反过来又会导致NPE)
您还必须使用Bucket
的构造函数或某些工厂方法,迭代数组并使用非空值初始化每个元素
list = new Bucket[8];