Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten

Stefan Dreis

Mitglied
Hat einer von euch schon Performace Erfahrung gemacht bzgl. eines Arrays mit 2 Werten?

also

Code:
    HashMap<String, String>

oder

Code:
    class Value2 {
            public  String string1;
            public  String string2;
     }

    List<Value2>

welches würdet ihr nehmen, wenn eine Liste schnell durchlaufen werden soll die über 2 Werte verfügt? (Hierbei kommt mir es aufs schnelle durchlaufen an und nicht so sehr, wofür Hashmap eigentlich da ist, dem assoziativen Zugriff) Oder sind beide Werte bezüglich schnellem Durchlaufs identisch? Oder gibt es sogar eine 3. Möglichkeit, die besser ist?
 
Wenn du nur durchiterieren musst, würde ich [c]List<Foo>[/c] verwenden. Als Impl bevorzuge ich quasi immer [c]ArrayList[/c]. Wenn du ab und zu noch per Key den Zugriff haben willst, verwende [c]Map<Ident, Foo>[/c]
 
Keine Ahnung was davon schneller ist. Aber wenn du ein Objekt mit zwei Werten hast und davon eine Liste brauchst, dann wärs doch ziemlich dämlich die erste Variante zu nehmen oder nicht ???:L
 
Von wievielen Elementen sprechen wir hier?
Code:
List
kann man nicht mit
Code:
HashMap
vergleichen, das eine ist ein Interface einer List und das andere eine konkrete Implementierung einer Map. Jede Implementierung (egal ob List oder Map) hat ihre Vor- und Nachteile. Du kannst sogar einfache Arrays nehmen.
Jedoch solltest du dich zunächst erstmal fragen: ist ein Gewinn von 1ms auf 100000000000 Elemente wirklich von einer so großen Bedeutung?
 
Ok, danke an allen soweit. Ich will das ganze jetzt noch dahin erweitern das in

Code:
    class Item {
            public String string1;
            public String string2;
    }

    class MyList extends ArrayList<Item> {
             ...
    }

die Liste MyList informiert wird das sich der Eintrag in eines Items geändert hat. Ich bin mir nicht sicher ob dieses mit dem Observer Pattern zu tun hat. Ich assoziere das zurzeit damit, ich selber habe mit diesem Pattern noch keine Erfahrung, vielleicht liege ich deshalb auch im Augenblick falsh. Ich habe mir das Pattern in "Java ist auch eine Insel" mir mal angeschaut. Aber nicht so ganz verstanden.

Wäre nett wenn mir hier einer weiterhelfen könnte.
 
So wird das wohl kaum klappen, da die Felder public sind und du keine Kontrolle darüber hast wer und dann diese ändern kann.
Aber wenn du dein Vorhaben (wozu auch immer) umsetzen willst, dann musst du es genau so wie beschrieben machen: wenn ein Eintrag geändert wurde, musst du die Liste informieren.
 
Hm, wieso genau willst du ArrayList erweitern? Das ist in der Regel nicht nötig.

die Liste MyList informiert wird das sich der Eintrag in eines Items geändert hat.
Das versteh ich nicht. Kannst du das nochmal genauer erklären?
 
Nochmal kurz wie realisiert man am besten in Java eine Liste mit Einträgen, die die Liste informiert, wenn sich ein Eintrag in der Liste ändert.
Meinst Du damit, dass sich das Attribut eines Eintrags ändert? Weil die Einträge selbst änderst Du ja direkt in der Liste.
 
Meinst Du damit, dass sich das Attribut eines Eintrags ändert? Weil die Einträge selbst änderst Du ja direkt in der Liste.

Nein ich meine

Code:
    class Item {
            private String string1;
            private String string2;
    }

    class MyList extends ArrayList<Item> {
             ...
    }

string1 oder string2 von der Klasse Item ändert sich dann soll MyList informiert werden z.B. über eine Notification. Gibs hierfür eine Technik unter Java? Soweit ich es bis jetzt verstanden habe wird hierfür Observer eingesetzt. Leider habe ich diese Technik noch nicht ganz verstanden, oder liege ich hier mit Observer Pattern falsch?
 
Nein ich meine
[...]
string1 oder string2 von der Klasse Item ändert sich dann soll MyList informiert werden
Das sind doch die Attribute der Items, also doch! 😉 Dafür ist das Observer-Pattern tatsächlich richtig. Schau Dir mal das Interface PropertyChangeListener an: PropertyChangeListener (Java Platform SE 6)

Deine List ist der PropertyChangeListener, Deine Items feuern PropertyChangeEvents (PropertyChangeEvent (Java Platform SE 6)). Der PropertyChangeSupport klebt das ganze zusammen. Das ganze ist Teil der Bean-Spez dort heißt sowas Bound-Properties. Hier ist das Tutorial dazu: Java Beans Tutorial, Pt. 4: Bound Properties
 

Zurück
Oben