Hashtable schreiben u auslesen - Problem
-
wie kann ich jedes objekt von einem array in der hashtabelle speicher ist das richtig so? ->Words[i].getClass()?? und wie lese ich die ganze Hashtabelle wieder aus? mir enumeration funktioniert das nicht?
(Random ist ein Objekt das einen String enthält)Random [] Words = new Random[10]; Hashtable wordTable = new Hashtable(); for (int i = 0; i < 10;++i){ Words[i] = new Random(5); WordTable.put(Words[i].getClass(),Words[i].getClass()); }
Auslesen funktioniert nicht?
/* for( Enumeration e = WordTable.keys(); e.hasMoreElements(); ) { Random s = (Random)e.nextElement(); System.out.println(s.getWord()); }
thx
-
1. Du willst vermutlich nicht das Klassenobjekt abspeichern, lass also das getClass() weg.
2. Du kannst nicht mehrere gleiche "Schlüssel" in einer Hashtable haben. Du kannst also nicht viele Randoms (als Schlüssel) mit gleichem Seed in eine Hashtable stecken.
3. Was soll das überhaupt? Warum willst du eine Hashtable nutzen, wenn du identischen Schlüssel und Werte hast? Da kannst du das doch auch in ner einfachen ArrayList oder so speichern und gleich auf diese Schlüssel-Werte-Geschichte verzichten.
4. Lass mich raten: Beim Auslesen kommt nur ein Eintrag heraus? ...siehe Punkt 2.
-
thx
zu
1.das mit getClass weglassen passt!2. ich hab doch nicht mehrere gleiche schüssel oder? -> Words[i] = new Random(5); ich generiere immer ein neues objekt mit einem random string(im objekt beim konstuktor mir länge 5) und will das das dann in hashtable speichern ? wieso nehme ich da immer den gleichen schlüssel? -> das versteh ich nicht?
3. will das einfach mal testen (der string in dem objekt sind random also nicht gleich oder?)
4. es kommen jetzt schon 10 werte raus hab eigentlich nur getClass bei beiden weggelassen -> WordTable.put(Words[i],Words[i]);
-
Downset schrieb:
2. ich hab doch nicht mehrere gleiche schüssel oder? -> Words[i] = new Random(5); ich generiere immer ein neues objekt mit einem random string(im objekt beim konstuktor mir länge 5) und will das das dann in hashtable speichern ? wieso nehme ich da immer den gleichen schlüssel? -> das versteh ich nicht?
4. es kommen jetzt schon 10 werte raus hab eigentlich nur getClass bei beiden weggelassen -> WordTable.put(Words[i],Words[i]);
Du verwechselst Gleichheit mit Identität. Du hast nicht 10 identische Schlüssel. Ich dachte bis eben, dass du 10 gleiche Schlüssel hast, habe mich aber anscheinend getäuscht, weil du jetzt doch 10 Werte kriegst. Anscheinend wurde in der Klasse Random die equals-Methode über den Operator "==" implementiert, was i.d.R. nicht der Fall ist. Wenn das nicht über == implemetiert wäre, würdest du nur einen Wert zurückkriegen.
-
ok heißt das dass angenommen mein Random hätte 2mal den gleichen string z.B.
Words[1] der string in diesem objekt = "bla"
Words[2] der string in diesem objekt = "bla"generiert dann hätte ich aber nur 9 objekte in der hashtabelle oder?
könnte ich das mit der while schleife so abfangen wie ich das da zusätzlich gemacht habe das heißt dass das objekt dann auch vom inhalt her also vom string verschieden sein muss? oder wie garantiere ich 100%ig dass ich 10 objekte habe mit unterschiedlichen strings?for (int i = 0; i < 10;++i){ Words[i] = new Random(5); while (passWordTable.containsKey(Words[i])) { Words[i] = new String(5); } WordTable.put(Words[i],Words[i]); }