Moin Leute, bin momentan echt am verzweifeln.
Ich versuche eine Tabelle durch Nutzung von HashCode zu befüllen aber es will nicht klappen. Gegooglet habe ich bereits und im Forum bin ebenfalls nicht fündig geworden.
Kann mir bitte jemand sagen, wo der Fehler liegt?
Bin für jede Hilfestellung dankbar!
EDIT: Ich glaube, dass die zweite Hash-Methode Probleme macht. Wüsste aber nicht warum.
Ich versuche eine Tabelle durch Nutzung von HashCode zu befüllen aber es will nicht klappen. Gegooglet habe ich bereits und im Forum bin ebenfalls nicht fündig geworden.
Kann mir bitte jemand sagen, wo der Fehler liegt?
Java:
import java.lang.*;
import java.util.*;
public class HashTable<E>{
private final E[] table;
Hashtable<Integer, E> t;
int kap;
@SuppressWarnings("unchecked")
public HashTable(final int capacity) {
table = (E[]) new Object[capacity];
t = new Hashtable<Integer, E>(capacity);
kap = capacity;
}
/**
* 1.Hashfunktion: "h(k)=k mod m"
* 2.Hashfuktion: "h'(k)=1 + k mod (m-2)"
* k ist der Wert des übergebenen elemets.
* m ist die Kapazität der Tabelle.
* Vorgehen bei Kollision: s(j,k)=j*h'(k)
* j ist die Anzahl der Kollisionen.
*
* @return Anzahl der betrachteten Plätze in der Hash-Tabelle
*
*/
public int insert(final E element){
if(t.size() == kap){
throw new IllegalStateException();
}
boolean added = false;
int count = 0; // der Zähler für betrachtete Stellen
int koll = 0; // Kollisionszähler
int index = hashCode(element);
while(added == false){
if(table[index] == null){
count++;
table[index] = element;
//added = true;
return count;
} else {
count++;
koll++;
index += koll*(hashCode2(element));
if(table[index] == null){
table[index] = element;
//added = true;
count++;
return count;
} else {
added = false;
count++;
}
}
}
return count;
}
public int hashCode(E element){
return Math.abs((Integer)element) % kap;
}
public int hashCode2(E element){
return 1 + Math.abs((Integer)element) % (kap-2);
}
Bin für jede Hilfestellung dankbar!
EDIT: Ich glaube, dass die zweite Hash-Methode Probleme macht. Wüsste aber nicht warum.