當我試圖將條目放入我的HashTable
時,我總是收到NullPointerException
。我不認爲它是我的私有調整方法,而是與我的散列方法有關。以下三種方法。此外,當數組被實例化時,所有的值都被設置爲null,並且它們的布爾可用性被設置爲true。布爾可用性是爲了查看添加下一個條目的位置(如果它們具有匹配的散列值),因爲我們正在執行線性探測實現。繼續在這個散列表推送方法中獲得NullPointerExecption
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);
}
這裏是我的入門級: 公共靜態類條目{ 私人K鍵;私人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;
}
你有堆棧嗎? – 2013-02-20 04:58:48
請注意[家庭作業標籤現已正式棄用](http://meta.stackexchange.com/q/147100/182862) – 2013-02-20 05:00:45
您在哪條線上獲得例外? – 2013-02-20 05:02:41