Performance: ArrayList vs. Array vs. "Eigene Liste&quot

Status
Nicht offen für weitere Antworten.
D

dttob

Gast
Hallo ihr,

mir stellt sich eine eher allgemeinere Frage. Und zwar geht es um die Speicherung großer Datenmengen. Wie sollten aus reiner Performance - Sicht (d.h. schneller Zugriff) diese Daten sinnvollerweise gespeichert werden?

(vereinfachte Darstellung):
z.B. 5000 Objekte

- ArrayList mit Zugriff über for - Schleife und Iterator oder direkt über arraylist.get(index)
- Arrray mit Zugriff über for-Schleife (begrenzt durch array.length)
- Eigene doppelte verkettete Liste mit Zugriff über getNext(),...

Welche der drei Möglichkeiten macht hier Sinn? Meiner Meinung nach ist eine eigene Liste für dieses Szenario nicht nötig, oder liege ich da falsch? Gibt es alternative, bessere Zugriffsmöglichkeiten für die Fälle, wie z.b. Iterator, usw...

viele Grüße

dttob
 
M

maki

Gast
Wie willst du denn darauf zugreifen?
Suchen?

Vielleicht willst du ja gar keine List, sondern zB. eine Map.
 

ARadauer

Top Contributor
Es gibt auch LinkedList von Java welche wahrscheinlihc beim sequenziellen Zugriff einen hauch schneller sein könnte als ArrayList (kann ich aber nicht sicher sagen)

Aber generell, bei 5000 Objekten merkt mans eigentlich nicht
 

tfa

Top Contributor
- ArrayList mit Zugriff über for - Schleife und Iterator oder direkt über arraylist.get(index)
Wenn die Anzahl der Objekte sich ändern kann und es wichtig ist, auf beliebige Indizes direkt zuzugreifen.

- Arrray mit Zugriff über for-Schleife (begrenzt durch array.length)
Wenn die Anzahl der Objekte sich nicht ändern kann und es wichtig ist, auf beliebige Indizes direkt zuzugreifen.

- Eigene doppelte verkettete Liste mit Zugriff über getNext(),...
Wenn sich die Anzahl und Reihenfolge der Objekte ändern können und es nicht nötig ist, auf beliebige Indizes direkt zuzugreifen, sondern nur per Iterator (LinkedList).

dttob hat gesagt.:
Wie sollten aus reiner Performance - Sicht (d.h. schneller Zugriff) diese Daten sinnvollerweise gespeichert werden?
Hast du denn Performance-Probleme?
 
D

dttob

Gast
Ich stehe noch recht am Anfang. Damit ich nicht in die falsche Richtung loslaufe, mache ich mir über eine sinnvolle Speicherung lieber direkt am Anfang Gedanken. Hab durch eure Antworten schon ein paar nette Anregungen erhalten.

Denke hauptsächlich wird es ein sequentieller Zugriff sein. Die 5000 Objekte waren nur als Beispiel gedacht, die Datenmengen in der Praxis werden deutlich größer sein. Ich bin auch gedanklich weiter voran gekommen. ;-)

Zum Projekt:
Genauer gesagt möchte ich aus einer DB Werte mit einem zugehörigem Zeitstempel abfragen und in meinem Programm zwischenspeichern und in einer GUI anzeigen. Da auch vergangene, historische Werte angezeigt werden sollen, möchte ich soviel wie möglich zwischenspeichern, d.h. Daten schon vorab laden, auch wenn sie noch nicht benötigt werden.

Vereinfacht möchte ich den Wert mit Zeitstempel als Objekt in einem 1000 er (festen) Array speichern. 1000 Werte, da so groß mein Darstellungsbereich ist...

Per Thread sollen immer 1000 er Blöcke aus der DB geladen werden und über eine Liste verwaltet werden. Neu geladene Blöcke müssen hinten angehängt werden, oder vorne als ersten Eintrag ergänzt werden.

Zugriff erfolgt entweder direkt, d.h. Wert zum Zeitpunkt X oder zeige Wert zum Zeitpunkt X bis Y an. Das scheint über Iteratoren recht gut zu gehen, allerdings stellt sich mir die Frage nach dem Hinzufügen neuer Blöcke (s.u.).

Nun genauere Fragen:
1. Ist solch eine Vorgensweise sinnvoll, bzw. gibt es schon was "fertiges" von der Java API?
2. Eignen sich die gegebenen Listen (ArrayList, LinkedList) für ein performantes Anfügen von neuen Arrayblöcken?
Was passiert, wenn ich an den Anfang der Listen einen neuen Eintrag setze?
Erfolgt ein neuordnen der Liste?

schöne Grüße

tobias
 

tfa

Top Contributor
Da auch vergangene, historische Werte angezeigt werden sollen, möchte ich soviel wie möglich zwischenspeichern, d.h. Daten schon vorab laden, auch wenn sie noch nicht benötigt werden.
Ich würde genau die Daten laden, die auch benötigt werden (also der Benutzer angezeigt haben will).
Potenziell überflüssige DB-Abfragen machen die Sache sicherlich insgesamt langsamer.

Performance-Probleme, die es noch nicht gibt, sollte man auch nicht zu lösen versuchen.
 
D

dttob

Gast
Da hast du Recht. Erst einmal keine unnötige Energie verschwenden. ;-)

Aber drücken wir es mal so aus, ich bereite es schon einmal so drauf vor, dass wenn diese Probleme auftreten, ich dann meine Klassen/Programmstruktor recht einfach erweitern kann. :lol:
 

Marco13

Top Contributor
Ist schwer zu sagen - keiner weiß, was genau du da machst oder machen willst... Wenn du streng vorgegebene Operationen hast, die sich garantiert nicht ändern werden, dann könnte es sinnvoll sein, sich ein Interface dafür zu basteln, und dann ggf. an der Implementierung rumzuspielen, um zu sehen, was am besten ist...
Code:
interface DataTarget
{
    void appendBlock(Object data[]);

    // .... ?
    // void appendBlockFront(Object data[]);
    // Object[] getData(int minTime, int maxTime);
    // .... ?
}

class ArrayDataTarget implements DataTarget
{
    private Object array[] = ...

    public void appendBlock(Object data[])
    {
        System.arraycopy(neues data in array);
    }
}

class ListDataTarget implements DataTarget
{
    private List list = ...

    public void appendBlock(Object data[])
    {
        for (Object object : data) list.add(object);
    }
}

Aber irgendwie klingt es, als würden die Operationen noch nicht so feststehen?!
 

byte

Top Contributor
Wenn Du nach Interfaces programmierst und nicht nach der Implementierung, ist die Frage nach der konkreten Listen-Implementierung erstmal sowieso irrelevant. Ich bezweifel eh, dass es an dieser Stelle bei Dir zu performance-Problemen kommen wird. Vielmehr werden so große DB-Abfragen langsam sein. Wenn Du 1000 oder gar 5000 SELECTs absetzt evtl. noch mit ein paar JOINs oder SUBSELECTs drin, dann wird die DB der Flaschenhals sein.
Denk lieber darüber nach, wie Du es von der GUI realisieren kannst, nicht gleich ewig viele Daten anzuzeigen, die eh kein Mensch überblicken kann. Wenn Du z.B. die Daten in einer Tabelle anzeigen willst, dann kannst Du Dir einen Pagable Table bauen, der Seitenweise nur z.B. 100 Datensätze anzeigt. Wenn Du die Daten hingegen in einem Baum anzeigen willst, dann kannst Du über Lazy Loading Trees nachdenken usw.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Performance ArrayList#remove Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
H Watson-Crick-Complement Performance Allgemeine Java-Themen 18
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
B Performance Messungen Allgemeine Java-Themen 4
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
I Performance - JDBC UPC PoolDataSoure Allgemeine Java-Themen 0
E Lambda filter performance Allgemeine Java-Themen 2
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
R DBUnit Performance Probleme Allgemeine Java-Themen 0
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
S starke performance probleme des forums Allgemeine Java-Themen 10
C Performance Tips Allgemeine Java-Themen 13
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
R Java Performance testen Allgemeine Java-Themen 18
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
V Performance steigern Allgemeine Java-Themen 7
D Reflection-Performance Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
R Collections Performance einer HashMap Allgemeine Java-Themen 26
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
D Performance Objektallokation Allgemeine Java-Themen 28
J Java Performance nicht nachvollziehbar Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Performance Allgemeine Java-Themen 6
M Performance Allgemeine Java-Themen 5
E Performance website download Allgemeine Java-Themen 13
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
J Performance von Java GUI-Anwendungen Allgemeine Java-Themen 2
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
S Performance und Function Call Depth Allgemeine Java-Themen 6
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
ARadauer Performance Pptimierung -Lesen/Schreiben Allgemeine Java-Themen 10
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
M Listener und Performance Allgemeine Java-Themen 9
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S Ursache für schlechte Performance Allgemeine Java-Themen 2
L Java Performance Check Tool Allgemeine Java-Themen 3
S Performance von Comparator Allgemeine Java-Themen 3
egrath Performance Problem mit File-I/O Allgemeine Java-Themen 6
S Performance Problem Allgemeine Java-Themen 11
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4
T Performance String-Operationen und StringBuffer (1.4und 1.5) Allgemeine Java-Themen 18
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
T Performance-Grundlagen Allgemeine Java-Themen 4
G Performance Problem bei der Übertragung Server zum Client Allgemeine Java-Themen 3
V Performance Leck finden Allgemeine Java-Themen 3
T Tile Game Performance Allgemeine Java-Themen 32
M Performance enorm langsam Allgemeine Java-Themen 26
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Performance: Java zu C/C++ bei Datenbankanwendung Allgemeine Java-Themen 3
Y unnecessary cast & Performance Allgemeine Java-Themen 29
conan2 Performance von paint() Allgemeine Java-Themen 2
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
F Bilder als "Thumbnails" laden - Performance Allgemeine Java-Themen 6
S Java3D Performance optimieren Allgemeine Java-Themen 5
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
T Performance Allgemeine Java-Themen 8
J Anfängerliste für gute Performance? Allgemeine Java-Themen 3
Luma Performance-Problem mit RandomAcces File Allgemeine Java-Themen 4
I Performance bei "String <-> Byte"-Umwandlung Allgemeine Java-Themen 4
I Performance-Probleme bei Schleife Allgemeine Java-Themen 3
C Performance von FOR Schleifen Allgemeine Java-Themen 25
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
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

Ähnliche Java Themen

Neue Themen


Oben