Antwort mit KI erzeugt
Hier ist die geforderte Implementierung der Klasse
SimpleHT
in Java, welche die beschriebene Hash-Tabelle realisiert. Diese Klasse enthält eine innere Klasse
Pair
zur Verwaltung der Schlüssel-Wert-Paare, und verwendet ArrayLists von verketteten Listen zur Behandlung von Kollisionen in der Hash-Tabelle.
java
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.ListIterator;
public class SimpleHT {
// Innere Klasse für Schlüssel-Wert-Paare
private class Pair {
Integer key;
Integer value;
Pair(Integer key, Integer value) {
this.key = key;
this.value = value;
}
}
// Die Hashtabelle als Array von verketteten Listen
private ArrayList<LinkedList<Pair>> table;
private int m;
// Konstruktor der Klasse SimpleHT
public SimpleHT(int m) {
this.m = m;
table = new ArrayList<>(m);
for (int i = 0; i < m; i++) {
table.add(new LinkedList<>());
}
}
// Hilfsfunktion zur Bestimmung der Adresse der verketteten Liste
private int addressOfList(Integer key) {
return Math.floorMod(key, m);
}
// Einfügen eines Schlüssel-Wert-Paares in die Hashtabelle
public void insert(Integer key, Integer value) {
int index = addressOfList(key);
LinkedList<Pair> list = table.get(index);
// Suchen, ob das Schlüssel bereits existiert
for (Pair pair : list) {
if (pair.key.equals(key)) {
// Wert überschreiben, falls Schlüssel existiert
pair.value = value;
return;
}
}
// Neues Paar hinzufügen, wenn Schlüssel nicht existiert
list.add(new Pair(key, value));
}
// Auslesen eines Wertes anhand des Schlüssels aus der Hashtabelle
public Integer get(Integer key) {
int index = addressOfList(key);
LinkedList<Pair> list = table.get(index);
// Suchen des Schlüssel-Wert-Paares
for (Pair pair : list) {
if (pair.key.equals(key)) {
return pair.value;
}
}
// Rückgabe von null, falls Schlüssel nicht existiert
return null;
}
// Entfernen eines Schlüssel-Wert-Paares aus der Hashtabelle
public boolean remove(Integer key) {
int index = addressOfList(key);
LinkedList<Pair> list = table.get(index);
ListIterator<Pair> iterator = list.listIterator();
while (iterator.hasNext()) {
Pair pair = iterator.next();
if (pair.key.equals(key)) {
iterator.remove();
return true;
}
}
// Rückgabe von false, falls Schlüssel nicht existiert
return false;
}
}
Erklärung der Implementierung:
1.
Innere Klasse Pair
: Diese Klasse speichert ein Schlüssel-Wert-Paar.
2.
Konstruktor: Initialisiert die Tabelle mit
m
verketteten Listen. Jede Position im Array der Hashtabelle ist eine
LinkedList
von
Pair
-Objekten.
3.
Hilfsfunktion addressOfList
: Berechnet die Indexadresse der verketteten Liste für einen gegebenen Schlüssel mithilfe von
Math.floorMod
.
4.
Einfügen (insert
): Wenn ein Schlüssel-Wert-Paar mit einem bestehenden Schlüssel eingefügt wird, wird der Wert überschrieben. Wenn der Schlüssel noch nicht vorhanden ist, wird ein neues Paar hinzugefügt.
5.
Auslesen (get
): Sucht nach einem Schlüssel und gibt den zugehörigen Wert zurück oder
null
, wenn der Schlüssel nicht gefunden wird.
6.
Entfernen (remove
): Entfernt ein Schlüssel-Wert-Paar und gibt
true
zurück, wenn das Paar erfolgreich entfernt wurde. Gibt
false
zurück, wenn der Schlüssel nicht gefunden wird.