我总是得到一个NullPointerException,为什么??? 当我运行debug时,int i被设置为-1 .... 但我不理解它,因为数组正在使用LinkedList进行初始化,并添加了一些内容。
通知这是我正在运行的测试:
Dictionary<String, String> dict = new HashDictionary<>(3);
System.out.println(dict.insert("gehen", "go") == null);
System.out.println(dict.insert("gehen", "walk").equals("go"))
这是我的代码:
private static final int DEF_CAPACITY = 31;
private int size = 0;
public LinkedList<Entry<K,V>>[] tab;
@SuppressWarnings("unchecked")
public HashDictionary() {
tab = new LinkedList[DEF_CAPACITY];
for(int i = 0; i < tab.length; i++) {
tab[i] = new LinkedList<>();
size++;
}
}
@SuppressWarnings("unchecked")
public HashDictionary(int n) {
if(isPrim(n)) {
tab = new LinkedList[n];
for(int i = 0; i < n; i++) {
tab[i] = new LinkedList<>();
size++;
}
return;
}
System.out.println("Keine Primzahl!");
return;
}
public int h(K key) {
int adr = key.hashCode();
if(adr < 0)
adr = -adr;
return adr % tab.length;
}
@Override
public V insert(K key, V value) {
Entry<K,V> eintrag = new Entry<>(key,value);
if(search(key) != null) {
V old = search(key);
int i = tab[h(key)].indexOf(key);
tab[h(key)].get(i).setValue(value);
return old;
} else {
if(tab[h(key)] == null)
tab[h(key)] = new LinkedList<Entry<K,V>>();
tab[h(key)].add(eintrag);
return null;
}
}
@Override
public V search(K key) {
int i = tab[h(key)].indexOf(key);
if(i >= 0){
return tab[h(key)].get(i).getValue();
}
return null;
}
感谢您的帮助!