Moien
ich habe ein DOM-Document (org.w3c.dom.document)
Mein Beileid.
Hi, wieso?
Mal ganz im Ernst: die API ist doch … eine Katastrophe. Und das ganze ist arschlangsam.
In der einen Subgruppe sind schon über 1000 drin *gfg*
Peanuts. Hashtables drehen bei mehr als 10000 Elementen richtig auf.
Sind die „Primary Keys“ eindeutig ? Auch in allen Subgruppen ?
Welche Klasse haben die ? (String, Integer, … Wertebereich
?)
Also innerhalb der Subgruppen sollten die IDs eindeutig sein.
In den anderen Subgruppen können die IDs noch einmal verwendet
werden.
OK, also 2 Ebenen:
- Ebene: Die Gruppen
Du erzeugt eine Hashtable mit den „Namen“ der Gruppen als key und Hashtables als Values. Also in der Art:
Hashtable alleWerte = new Hashtable();
for (alle deine gruppen){
Hashtable gruppe = new Hashtable();
(die Hashtable füllen, mehr in Ebene 2)
alleWerte.put („name-der-gruppe“, gruppe);
}
- Ebene: Der Inhalt der Gruppe.
Du läufst den Inhalt der Gruppe linear ab. Für jedes Element X:
gruppe.put (ID-von-X,X);
Zum raussuchen:
Hashtable gruppe = (Hashtable) alleWerte.get(name-der-gruppe);
gesuchtesElement = (Elementklasse) gruppe.get(Id-des-Element);
Es gibt nur einen grossen Problemfall. Wenn du 2x die gleiche ID innerhalb einer Gruppe hast war alles für die Katz. In dem Fall muss man noch eine Ebene mit Vectoren unter der 2. einfügen. Anstelle von dem Einzeiler gruppe.put(…) ergibt sich:
Vector container = (Vector) gruppe.get(ID-von-X);
if (container == null){
container = new Vector();
gruppe.put (ID-von-X,container);
}
container.add(Element-X);
Beim suchen bekommt man dann auch immer zuerst einen Vector. Den dann linear ablaufen. Dieses Verpacken kostet allerdings richtig Zeit und Speicher. Ist aber immernoch viel, viel schneller als lineares ablaufen.
Also am besten einen Vector mit HashMap - Elementen und in
denen dann suchen?
Ja, kann man auch so machen. Nachteil ist das lineare Suchen im Vector. Wenn schon optimieren dann richtig. Der Speicherverbrauch einer Hashtable ist nur minimal grösser als der eines Vector. Und bei z.B. 10 Elementen dauert lineares ablaufen 5 Zeiteinheiten, Hashtable-zugriff aber nur eine.
cu