ArrayList schneller als LinkedHashMap?

Friedhelm

Bekanntes Mitglied
Hallo,

Wie ist Eure Erfahrung mit LinkedHashMap und ArrayList bzgl. der Geschwindigkeit?

Ich habe eine Liste mit ca. 1000 Objekten. Dabei ist mir aufgefallen, dass wenn ich die Liste komplett durchlaufe, ist ArrayList immer noch schneller als mit einer LinkedHashMap.


Beispiel ArrayList:
ArrayList<Box> boxes = new ArrayList<Box>();
for(int i=0;i<boxes.size();i++) System.out.println(boxes.boxname);


Beispiel LinkedHashMap:
Enumeration e = boxes.keys();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
System.out.println(name + " --> " + boxes.get(name).boxname );
}


Problem ist aber... wegen der Geschwindigkeit müsste ich somit eine ArrayList verwenden, wenn die ganze Liste durchlaufen werden soll. Nur ist ja wohl eine LinkedHashMap viel schneller, wenn ich nur 1 Objekt aus den 1000 erhalten möchte ( boxes.get("Boxname") )

Grund ist... es sind OpenGL Boxen die 60 Mal in der Sekunde neu gezeichnet werden sollen, aber ich auch einzelne Objekte aus der Liste suchen lasse.

1. Soll ich trotz des Geschwindigkeitsverlustes (ca. 5-8 FPS von 60 FPS) eine LinkedHashMap verwenden?
2. Lohnt sich eine LinkedHashMap nicht bei max. 25 Objekten in der Liste (ist dann eine ArrayList immer noch bei einem Komplett-Suchdurchlauf schneller)?

Wäre die beste Lösung man führt 2 Listen parallel, eine LinkedHashMap (für gezielte Objektsuche) und eine ArrayList für komplette Druchläufe, oder gibt es noch eine bessere Lösung für mein Problem?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Enumeration ist eigentlich veraltet, man sollte stattdessen Iteratoren verwenden. Abgesehen davon ist es natürlich ganz schlecht, über die keys zu iterieren, und für jeden Key nochmal einen Lookup für die value zu machen! Statt des geposteten Codestücks solltest du eher
Java:
        LinkedHashMap<String, Integer> m = new LinkedHashMap<String, Integer>();
        for (Entry<String, Integer> entry : m.entrySet())
        {
            System.out.println(entry.getKey()+" -> "+entry.getValue());
        }
machen. Das könnte dann u.U. immernoch etwas langsamer sein als bei einer ArrayList, aber was dort gemacht wird ist dann eigentlich das gleiche wie bei einer LinkedList, d.h. der Unterschied dürfte nicht mehr so dramatisch sein.
 

Friedhelm

Bekanntes Mitglied
Ja, das könnte hinhauen. Bei der LinkedHashMap hat mich bei der Schleife immer gestört, dass für jedes Element die Value erst über den Key geholt werden muss.

Aber die Lösung die ich habe, mit der HashMap die den Namen des Objektes mit der Indexposition des Objektes in der ArrayList speichert, finde ich doch noch einen Tick optimaler :D

So habe ich FullSpeed aber auch gezielt und schnell ein Objekt aus 1000 parat.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Eigentlich würde man das ja testen, ggf. mit einem Profilerlauf. Aber wenn man unbedingt indizierten Zugriff UND Map-Lookups braucht, kann man das natürlich machen. Oft gibt es einen Tradeoff zwischen Speicherplatzbedarf und Geschwindigkeit, aber bei 1000 Elementen in einer zeitkritischen Anwendung würde man wohl eher auf letztere Wert legen.
 
M

maki

Gast
An dieser Stelle sei auch FindBugs empfohlen, das findet u.a. solche Stellen und meldet sie:
Java:
Enumeration e = boxes.keys();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
System.out.println(name + " --> " + boxes.get(name).boxname );
}
 

Ullenboom

Bekanntes Mitglied
LinkedHashMap und ArrayList haben zwei völlig unterschiedliche Aufgaben.

a) wenn du schnell assoziierte Werte zu einem Schlüssel haben möchtest: HashMap

b) wenn du die Reihenfolge beim Einfügen brauchst und auf Postionen zurückgreifen möchtest: ArrayList

c) wenn die Reihenfolge UND schneller Schlüsselzugriff nötig ist, nutzte LinkedHashMap. Diese Doppelfunktion hat aber ihren Preis

Demnach: Wenn nur die Reihenfolge wichtig ist, bzw. vielleicht das sogar nicht, sondern einfach nur ein Container zu ablaufen, dann ist ArrayList die beste Wahl. (Vorher mit der Größe vorbelegen.)

Grüße

Christian
 

Marco13

Top Contributor
d) Wenn Reihenfolge, schneller Schlüsselzugiff UND indizierter Zugriff nötig ist, bist du gescrewed :D

Dann muss man sich eben was überlegen...

EDIT: Ach, indizierter Zugriff wird hier gar nicht gebraucht... da hab' ich wohl den Thread verwechselt :oops: Aber wie es mit LinkedHashMap gehen würde, steht ja oben schon :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M ArrayList oder LinkedList Allgemeine Java-Themen 10
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
L ArrayList sortieren Allgemeine Java-Themen 2
C ArrayList Problem Allgemeine Java-Themen 3
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
S ArrayList Design Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
X Output von ArrayList Allgemeine Java-Themen 3
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Mehrdimensionale ArrayList mischen Allgemeine Java-Themen 10
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
MiMa Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
MiMa ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
GreenTeaYT Verständnisprobleme zur Arraylist Allgemeine Java-Themen 1
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
K ArrayList sortieren Allgemeine Java-Themen 16
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
S Mehrdimensionales ArrayList ins HashSet Allgemeine Java-Themen 10
C ArrayList Allgemeine Java-Themen 8
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
K Array in ArrayList Allgemeine Java-Themen 16
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
Paul15 Arraylist 2D Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
Neumi5694 Datentypen ArrayList vs TreeMap Allgemeine Java-Themen 6
F ArrayList Allgemeine Java-Themen 11
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
Z Elemente einer ArrayList von rechts wegnehmen Allgemeine Java-Themen 5
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
R ArrayList und HashMap Allgemeine Java-Themen 7
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
Doopy ArrayList plötzlich leer Allgemeine Java-Themen 2
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L ArrayList Inhaltstyp. Allgemeine Java-Themen 5
Z Klassen ArrayList selbst machen Allgemeine Java-Themen 5
J Arraylist speichern und laden? Allgemeine Java-Themen 5
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
M ArrayList<String> Frage Allgemeine Java-Themen 7
O ArrayList kaputt?! Allgemeine Java-Themen 5
M ArrayList<Foo> in ein Foo[] konvertieren? Allgemeine Java-Themen 8
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
O ArrayList - Serialisierungs-Problem Allgemeine Java-Themen 11
M JTable + ArrayList Allgemeine Java-Themen 3
M Datentypen ArrayList in Integer konvertieren Allgemeine Java-Themen 3
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
Madlip Variablen 3 Werte aus ArrayList und weiter ... Allgemeine Java-Themen 4
S arraylist nach n. Eintrag numerisch Sortiren Allgemeine Java-Themen 5
O Problem beim Auslesen einer Arraylist von JComboBoxen Allgemeine Java-Themen 2
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
M Kovariante Rückgabewerte mit ArrayList Allgemeine Java-Themen 3
H LinkedList<LinkedList<String>> nach ArrayList<ArrayList<String>> ? Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
Maxim6394 Problem mit ArrayList Allgemeine Java-Themen 5
E Berechnung in Arraylist Allgemeine Java-Themen 10
E ArrayList mit unbekannter Größe Allgemeine Java-Themen 8
V Fork Join bei Arraylist Allgemeine Java-Themen 6
H Fehler in Arraylist Allgemeine Java-Themen 2
S Datensätze in eine ArrayList<Movie> speichern Allgemeine Java-Themen 13
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
V ArrayList vergleichen mit .equals? Allgemeine Java-Themen 13
J ArrayList-Problem Allgemeine Java-Themen 16
S Von einer ArrayList in die andere schreiben? Allgemeine Java-Themen 6
S ArrayList<JLabels> "malen" Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben