ist das schwieriger code in Java?
bin mit listen und doppelten liste, stacks und queues fertig, polymorphie fange ich gerade an, wie viele tage brauche ich, um diesen code zu verstehen bzw. selbser zu implementieren
public class HashTable {
public Object[] hashTable;
private int numCollisions;
public int getNumCollisions() {
return numCollisions;
}
public HashTable(int size){
hashTable = new Object[size];
numCollisions = 0;
}
public void add(Object element){
int elementIndex = getHashValue(element)%hashTable.length;
int index = elementIndex;
while (hashTable[index] != null){
numCollisions++;
index = (index + 1)%hashTable.length;
if (index == elementIndex){
System.out.println("Full");
return;
}
}
hashTable[index] = element;
}
private int getHashValue(Object element) {
return element.hashCode();
}
public boolean contains(Object element){
int elementIndex = getHashValue(element)%hashTable.length;
int index = elementIndex;
while (hashTable[index] != null){
if (element.equals(hashTable[index])){
return true;
}
index = (index + 1)%hashTable.length;
if (index == elementIndex) {
return false;
}
}
return false;
}
public void print(){
for (int i = 0; i < hashTable.length;i++){
System.out.println(hashTable[i]);
}
}
}
2 Antworten
Nein, kein schwieriger Code.
Ist einfaches Hashing mit offener Adressierung und sind ja auch nur ne Hand voll Zeilen.
https://de.wikipedia.org/wiki/Hashtabelle#Geschlossenes_Hashing_mit_offener_Adressierung
Das witzige ist, daß nichtmal eine Hashfunktion implementiert wird, sondern man sich blind auf den Hashcode der Elemente verlässt und hofft, daß brauchbar auf die Buckets gestreut wird.
So weit würde ich nicht unbedingt gehen, man hat es sich halt recht einfach gemacht und verschiebt einen Teil der Arbeit hin zu demjenigen, der diese Hashtabelle nutzen möchte.
Die Sache ist die, all das, was aus der Standardbibliothek kommt und einen hashcode liefert, liefert vermutlich einen brauchbaren Hashcode. In dem Moment, wo benutzerdefinierte Typen hinzukommen wirds interessanter.
Ein anderer Faktor ist, der Nutzer muß hier wissen, daß er vorzugsweise eine Tabellengröße nehmen sollte, die prim ist.
In Java, spezifisch? Nein, weil hier keine sonderlich anspruchsvollen Sprachfeatures von Java genutzt werden.
Du musst halt das Konzept einer einfachen Hashtable verstehen. Nicht sonderlich schwierig, aber wie lange du dafür brauchst wissen wir nicht...
also sogar schlecht programmiert