Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用hashcode()模数返回数组的长度,但出现空指针异常_Java_Nullpointerexception_Hashcode - Fatal编程技术网

Java 使用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

我尝试使用字符串的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 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];