Krain Geschrieben 31. Juli 2003 Geschrieben 31. Juli 2003 Ich hol mir aus nem Hashtable mit h.elements() eine Enumeration. Hashtable t = new NABHashtable("","PDM400","MGRP","Z",tmpWAGR+" "+tmpFOGR); Enumeration enum = t.elements(); tmpTable = new NPPageTable(); while(enum.hasMoreElements()) { tmpTableRecord = new NPPageTableRecord(); tmpTable.addRecord(tmpTableRecord); String mgrp = (String)enum.nextElement(); // WAGR tmpField = new NPPageField("", nabjPruefwert.getNABWert("","PDM400","MGRP","",mgrp)); tmpTableRecord.addElement(1, "T_MGRP", tmpField); tmpField = new NPPageField("", mgrp); tmpTableRecord.addElement(1, "MGRP", tmpField); } tmpPageData.addElement("S0222" ,1, "T002", tmpTable); Ich will mir die einzelenen PageFields wieder holen, aber sie stehen in der genau umgekehrten Reihenfolge wie im Hashtable in meinem TableRecord. Kann mir einer verraten warum? Zitieren
Jaraz Geschrieben 31. Juli 2003 Geschrieben 31. Juli 2003 Hi, ich verstehe zwar nicht ganz was du da machst, aber eine Hashtable ist nicht sortiert und behält auch keine Reihenfolge. Sie ist nur dazu da, über einen key ein Object zu liefern. Gruß Jaraz Zitieren
Krain Geschrieben 31. Juli 2003 Autor Geschrieben 31. Juli 2003 Aber in meinem Hashtable stehen die Objekte noch in der Richtigen Reihenfolge drinnen. Aber in der Enumeration nicht! Kann es sein, dass der Hashtable ein Stapel ist, den die Enumeration von oben nach unten aufnimmt? Ups: verklickt... (Jaraz) Zitieren
Jaraz Geschrieben 31. Juli 2003 Geschrieben 31. Juli 2003 Aber in meinem Hashtable stehen die Objekte noch in der Richtigen Reihenfolge drinnen. Zufall, da du alle Objekte direkt vor dem einfügen erzeugst und sie somit einen aufsteigenen Hashcode haben. Eine Hashtable ist UNSORTIERT. Alles was eine sortierung oder Reihenfolge benötigt musst du mit anderen Mitteln realisieren. (TreeMap, ArrayList, Vector....) Gruß Jaraz Zitieren
Krain Geschrieben 31. Juli 2003 Autor Geschrieben 31. Juli 2003 Ich fülle meinen Hashtable aber aus einem Vector, Dadurch ist der Hashtable auf jedenfall in der richtigen Reihenfolge belegt, wenn ich dich richtig verstehe. Aber das Enumeration-Objekt liest den Hashtable von oben nach unten! Zitieren
Jaraz Geschrieben 31. Juli 2003 Geschrieben 31. Juli 2003 Original geschrieben von Krain Dadurch ist der Hashtable auf jedenfall in der richtigen Reihenfolge belegt, wenn ich dich richtig verstehe. Nein, nein, nein!!!!!!!! Die Reihenfolge wie Elemente in einem Hashtable abgelegt werden ist ZUFÄLLIG (nicht wirklich, aber man sollte es so betrachten). Einen Hashtable kannst Du deshalb nur verwenden, wenn die Reihenfolge in der die Elemente gespeichert werden völlig egal ist. Wenn Du eine Datenstruktur benötigst, die eine bestimmte Reihenfolge garantiert, dann musst Du eine Liste wie z.B. LinkedList oder ArrayList nehmen. Gruß Jaraz Zitieren
Krain Geschrieben 31. Juli 2003 Autor Geschrieben 31. Juli 2003 Okay - sorry Ich verstehe schon. Dann wird wohl das auch nicht funktionieren um es sortiert zu bekommen: String[] enum =(String[]) hashtable.values().toArray(); Hab es anders gelöst: Zur selben Zeit, wie ich den Hashtable fülle, fülle ich mir auch einen Vector. Diesen kann ich mir dann aus dem Hashtable-Objekt zurückgeben lassen. Trotzdem danke für deine Hilfe. Und entschuldige meine nervenaufreibende Unverständnis Zitieren
PerdianMG Geschrieben 31. Juli 2003 Geschrieben 31. Juli 2003 Zur selben Zeit, wie ich den Hashtable fülle, fülle ich mir auch einen Vector. Diesen kann ich mir dann aus dem Hashtable-Objekt zurückgeben lassen. Wenn du nicht unbedingt eine Hashtable benötigst (weil im 1.1er Applet) sondern auch die neuere Map verwenden kannst dann solltest du dir mal die LinkedHashMap ansehen, die macht nämlich genau das was du willst. Die Einträge bleiben schnell über eine interne HashMap erreichbar und beim Iterieren mit einem Iterator bekommst du die gleichen Reihenfolge, in der die Elemente in die Map eingefügt wurden. Ciao Christian Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.