Hallo, ich weiß nicht genau wie man mit Hashverfahren etwas im Array zufügt !Soweit habe ich private ArrayList<WortListe> _wortliste ; _wortliste=new ArrayList(groesse); zugefügt und
geschrieben ! Kann jemand bitte mir weiterhelfen ?
Die Aufgabe ist :
Vervollständigt nun die Klasse HashWortschatz, indem ihr ein Hash-Verfahren implementiert. Für die Hashwertberechnung steht (über einen Konstruktor-Parameter) eine Implementierung des Interfaces HashWertBerechner bereit. Die Angabe eines Berechners erlaubt die Verwendung verschiedener HashFunktionen. Denkt daran, dass der von der Hash-Funktion gelieferte Wert noch auf die Größe der Tabelle angepasst werden muss, um einen gültigen Index in die Tabelle zu erhalten. Das ist in mehreren Methoden nötig, beispielsweise in fuegeWortHinzu.Verwendet als Überlaufbehälter Exemplare der mitgelieferten Klasse WortListe. Eure Hash-Tabelle soll also ein Array von WortListen sein. Die Größe dieser Hash-Tabelle bekommt eure Implementierung über den Konstruktor von HashWortschatz als zweiten Parameter übergeben.
Das ist die Klasse WortListe
und diese Klassen(Delegation,zweiBuchstaben,Laenge) implementieren HashWertBerechner
Code:
public void fuegeWortHinzu(String wort)
{
_berechner.hashWert(wort);
_wortliste.add(_berechner.hashWert(wort));
}
Die Aufgabe ist :
Vervollständigt nun die Klasse HashWortschatz, indem ihr ein Hash-Verfahren implementiert. Für die Hashwertberechnung steht (über einen Konstruktor-Parameter) eine Implementierung des Interfaces HashWertBerechner bereit. Die Angabe eines Berechners erlaubt die Verwendung verschiedener HashFunktionen. Denkt daran, dass der von der Hash-Funktion gelieferte Wert noch auf die Größe der Tabelle angepasst werden muss, um einen gültigen Index in die Tabelle zu erhalten. Das ist in mehreren Methoden nötig, beispielsweise in fuegeWortHinzu.Verwendet als Überlaufbehälter Exemplare der mitgelieferten Klasse WortListe. Eure Hash-Tabelle soll also ein Array von WortListen sein. Die Größe dieser Hash-Tabelle bekommt eure Implementierung über den Konstruktor von HashWortschatz als zweiten Parameter übergeben.
Java:
class HashWortschatz implements Wortschatz
{
private final HashWertBerechner _berechner;
private ArrayList<WortListe> _wortliste ;
/**
* Initialisiert ein neues Exemplar von HashWortschatz.
*
* @param berechner der Berechner, welcher die Hashfunktion umsetzt
* @param groesse die (initiale) Groesse der Hashtabelle
*/
public HashWortschatz(HashWertBerechner berechner, int groesse)
{
_berechner = berechner;
_wortliste=new ArrayList(groesse);
}
/**
* Fuege ein Wort zum Wortschatz hinzu, sofern es noch nicht enthalten ist.
*
* @param wort das hinzuzufuegende Wort
*/
public void fuegeWortHinzu(String wort)
{
_berechner.hashWert(wort);
_wortliste.add(_berechner.hashWert(wort));
}
/**
* Gib an, ob ein Wort im Wortschatz enthalten ist.
*
* @param wort das zu ueberpruefende Wort
* @return true, falls das Wort enthalten ist, false sonst
*/
public boolean enthaeltWort(String wort)
{
return false;
}
/**
* Gib an, wieviele Woerter im Wortschatz enthalten sind.
*
* @return die Anzahl der Woerter im Wortschatz
*/
public int anzahlWoerter()
{
return 0;
}
/**
* Diese Beschreibung dient zur Unterscheidung beim Messen.
*/
public String gibBeschreibung()
{
return _berechner.gibBeschreibung();
}
/**
* Schreibt den Wortschatz auf die Konsole (als Debugging-Hilfe gedacht).
*/
public void schreibeAufKonsole()
{
}
}
Das ist die Klasse WortListe
Code:
class WortListe implements Iterable<String>
{
private final List<String> _liste;
/**
* Konstruktor fuer Objekte der Klasse WortListe
*/
public WortListe()
{
_liste = new ArrayList<String>();
}
/**
* Fuege der Liste ein Wort hinzu.
* @param wort das hinzuzufuegende Wort
*/
public void fuegeWortHinzu(String wort)
{
_liste.add(wort);
}
/**
* Loesche ein Wort aus der Liste.
* @param wort das zu loeschende Wort
* @return true, sofern das Wort vorher enthalten war und somit entfernt wurde, false sonst
*/
public boolean entferneWort(String wort)
{
return _liste.remove(wort);
}
/**
* Pruefe, ob das Wort in der Liste enthalten ist.
* @param wort das zu ueberpruefende Wort
* @true, falls das Wort in der Liste enthalten ist
*/
public boolean enthaeltWort(String wort)
{
return _liste.contains(wort);
}
/**
* Gib die Anzahl der Woerter in der Liste.
* @return die Anzahl der Woerter in der Liste
*/
public int anzahlWoerter()
{
return _liste.size();
}
/**
* Liefere das Wort mit dem Index index.
* @param index der Index
* @return das Wort zu dem index
*/
public String gibWort(int index)
{
return _liste.get(index);
}
/**
* Liefere einen Iterator ueber die Liste der Woerter.
* @return den Iterator
*/
public Iterator<String> iterator()
{
return _liste.iterator();
}
/**
* Liefere eine String-Repraesentation der Liste.
* @return eine String-Repraesentation der Liste
*/
public String toString()
{
String s = "";
for(String wort : _liste)
{
s += wort + " ";
}
return s;
}
}
Code:
/**
* Delegiert die Berechnung an das String-Objekt.
*/
class Delegation implements HashWertBerechner
{
/**
* @see HastWertBerechner.hashWert
*/
public int hashWert(String wort)
{
return wort.hashCode();
}
/**
* @see HastWertBerechner.gibBeschreibung
*/
public String gibBeschreibung()
{
return "Delegiert die Berechnung an das String-Objekt";
}
}
/**
* Berechnet den HashWert aus dem ersten und letzten Buchstaben.
*/
class ZweiBuchstaben implements HashWertBerechner
{
/**
* @see HastWertBerechner.hashWert
*/
public int hashWert(String wort)
{
return wort.charAt(0) * 123456791 + wort.charAt(wort.length() - 1);
}
/**
* @see HastWertBerechner.gibBeschreibung
*/
public String gibBeschreibung()
{
return "Berechnet den HashWert aus dem ersten und letzten Buchstaben";
}
}
/**
* Liefert die Laenge des Strings als HashWert.
*/
class Laenge implements HashWertBerechner
{
/**
* @see HastWertBerechner.hashWert
*/
public int hashWert(String wort)
{
return wort.length();
}
/**
* @see HastWertBerechner.gibBeschreibung
*/
public String gibBeschreibung()
{
return "Liefert die Laenge des Strings als HashWert";
}
}
Zuletzt bearbeitet: