NullPointerException
尝试将条目放入我的HashTable
. 我不认为这是我的私人调整大小方法,而是与我的哈希方法有关。三种方法如下。此外,当数组被实例化时,所有值都设置为 null,并且它们的布尔可用性设置为 true。布尔可用性是查看在何处添加下一个条目(如果它们具有匹配的哈希),因为我们正在执行线性探测实现。
public V put(K key , V value) {
V v = null;
int hashVal = hash(key);
size++;
if (size >= maxSize) {
resize();
} else {
while (!table[hashVal].isAvailable()) {
hashVal++;
}
table[hashVal]=newtable[hashVal] Entry<K= new Entry < K,V> V > (key, value);
table[hashVal].setAvailable(false);
return value;
}
return v;
}
private void resize() {
int _length = 2*length;2 * length;
maxSize = (int) MAX_LOAD_FACTOR * _length;
Entry<KEntry < K,V>[] V > [] old = table;
table=table = new Entry[_length];
size=0;size = 0;
for (int i=0;i<oldi = 0; i < old.length; i++) {
if (!old[i].isAvailable()) {
put(old[i].getKey(), old[i].getValue());
}
}
}
private int hash(Object o) {
return (o.hashCode() % length);
}
这是我的入口类: public static class Entry { private K key; 私人V值;可用的私有布尔值;
public Entry(K key, V value) {
this.setKey(key);
this.setValue(value);
this.setAvailable(true);
}
public void setKey(K key) {
this.key = key;
}
public K getKey() {
return this.key;
}
public void setValue(V value) {
this.value = value;
}
public V getValue() {
return this.value;
}
public boolean isAvailable() {
return available;
}
public void setAvailable(boolean available) {
this.available = available;
}
}
我在我的 put 方法中的 while 循环中获得了 NPE。
这是我的构造函数,用于初始化我的哈希表以及一些本地变量
private int length, size;
private int maxSize;
/**
* The underlying array for this hashtable
*/
private Entry<K,V>[] table;
public HashTable() {this(11);}
@SuppressWarnings("unchecked")
public HashTable(int length) {
this.length=length;
table=new Entry[length];
for(int i=0;i<table.length;i++) {
table[i]=null;
}
maxSize=(int)(MAX_LOAD_FACTOR * length);
size=0;
}