ArrayList oder LinkedList

KonradN

Super-Moderator
Mitarbeiter
was von beidem benötigt mehr Speicher ?
Spielt das eine Rolle?

Aber da es vermutlich eine Frage aus Studium oder Schule ist: Was für Gedanken hast Du Dir dazu gemacht? hast Du Dir schon überlegt, was die beiden Klassen genau wie implementieren?

Daraus kannst Du dann ggf. ableiten, unter welche Umständen welche Implementation günstiger ist.
 

Mariexshhx

Bekanntes Mitglied
Spielt das eine Rolle?

Aber da es vermutlich eine Frage aus Studium oder Schule ist: Was für Gedanken hast Du Dir dazu gemacht? hast Du Dir schon überlegt, was die beiden Klassen genau wie implementieren?

Daraus kannst Du dann ggf. ableiten, unter welche Umständen welche Implementation günstiger ist.
Ich möchte 1000 alte Dokumente, die ich im Archiv der Universität verstaut
habe, digital speichern und niemals wieder anrühren, dabei aber trotzdem
möglichst wenig Speicherplatz verbrauchen.


ich habe das Szenario und eine LinkedList besteht aus Listobjekten und eine Arraylist intern aus einem Array und wenn nicht mehr genug Platz im Array ist wird ein neues Array angelget welches doppelt so viel Platz hat wie das alte und es wird vom alten rüberkopiert ... also würde ich sagen, weil man ja möglichst geringen Speicherverbrauch haben will und bei der verdopplung des Arrays möglichweise nicht den ganzen Platz nutze wäre die LinkedList besser ....
 

KonradN

Super-Moderator
Mitarbeiter
ich habe das Szenario und eine LinkedList besteht aus Listobjekten und eine Arraylist intern aus einem Array und wenn nicht mehr genug Platz im Array ist wird ein neues Array angelget welches doppelt so viel Platz hat wie das alte und es wird vom alten rüberkopiert ... also würde ich sagen, weil man ja möglichst geringen Speicherverbrauch haben will und bei der verdopplung des Arrays möglichweise nicht den ganzen Platz nutze wäre die LinkedList besser ....
Das ist doch viel zu ungenau.

Beschreibe einmal, was für Platz für eine LinkedList brauchst. Was wird da gespeichert?
Und auch bei der ArrayList - da hast du wenigstens schon etwas an Informationen aber noch viel zu ungenau.

Du meinst wohl, dass man da einen "worst case" betrachten kann und dann hat man ein doppelt so großes Array wie notwendig, so dass man bei n Elementen 2*n an Platz (für Referenzen) braucht.

Jetzt musst Du nur noch eine ähnlich genaue Angabe zu der LinkedList aufstellen.
 

Neumi5694

Top Contributor
In anbetracht der Tatsache, dass jedes deiner Dokumente bei weitem größer ist als ein Array, ist die Frage eigentlich obsolet.
Jedes Feld in deinem Array beinhaltet nichts weiter als eine Speicheradresse. Sagen wir mal, das Array hat eine Größe von 2000 (1000 Dokumente x 2). Dann hast du im schlimmsten Fall (noch gar kein Dokument in der Liste) einen Verlust von du hast 2000*8 Byte = 16000 Byte Verlust, das ist weniger als ein Cluster auf den meisten Festplatten.

Mit einer Linkedlist hast du so gesehen gar keinen Verlust. Anstatt eines Arrays von Speicheradressen hat jedes Element deiner Liste genau eine Folgespeicheradresse (und gegebenenfalls eine auf das vorige Element).

Du kannst schon mit dem Konstruktor von Anfang an oder zu einem beliebigen Zeitpunkt mit ensureCapacity festlegen, wie groß das Array in deiner ArrayList sein soll. Wenn du die Anzahl an Dokumenten kennst, sparst du so das umkopieren, was aber vernachlässigbar kurz ist (System.arraycopy ist ein sehr schnell ausgeführter Befehl).
Außerdem bietet ArrayList eine Methode, um das Array auf die tatsächlich genutzte Anzahl von Einträgen zu verkleinern.

Eine LinkedList würde ich wirklich nur dann verwenden, wenn sie zwingend notwendig ist und wo es garantier auch keine Nullelemente geben kann. Früher zu meinen Java-Anfangszeiten hab ich damit gearbeitet, aber der Aufwand ist so ungeheuer viel größer ... der einzige Vorteil, den sie hat, ist von einem Element auf das nächste zugreifen zu können. Ich hab gelernt, ohne diese Funktion leben zu können. Für alles andere ist eine ArrayList besser geeignet.

Dehalb mein Tip: Wähl die Listenart, die dir das Arbeiten vereinfacht. Pfeif auf den Speicher.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Mit einer Linkedlist hast du so gesehen gar keinen Verlust. Anstatt eines Arrays von Speicheradressen hat jedes Element deiner Liste genau eine Folgespeicheradresse (und gegebenenfalls eine auf das vorige Element).
Das mit dem Verlust sehe ich etwas anders. Die Frage ist ja ganz deutlich gewesen und ich ärgere mich, dass da vom TE nichts konkretes gekommen ist - trotz allem nachhaken.

Was man z.B. auch Laienhaft ohne tiefen Einblick sehen sollte:
- Die ArrayList hast eine Instanz für die ArrayList und dann eine Referenz auf das Array. Man kann dann noch schauen, was für Variablen noch benötigt werden, aber man will den Speicherverbrauch für n Elemente haben und da kann man einzelne Variablen ignorieren - zumindest beim ersten Blick. Das Array hat eine Größe von n (Arraygröße passt genau) bis 2*(n-1) (Beim vorletzten Element war das Array voll und wurde daher verdoppelt für das letzte Element) - einzelne Variablen ignorieren wird gerade, also aus dem 2n-2 machen wir ein 2n. (z.B. an Referenzen - wir betrachten einfach ein Referenz-Datentyp.)

- Die LinkedList wird deutlich komplexer:
a) Wir haben wieder die Instanz der eigentlichen LinkedList. Mit paar einzelnen Variablen die wir hier auch nicht im Detail betrachten.
b) Für jedes der n Elemente haben wir nun eine zusätzliche Instanz. Damit kommt direkt der Overhead der Instanz - und das n mal! Wie hoch der Speicherverbrauch genau ist, ist etwas komplexer. Vereinfachen wir es massiv: Dann haben wir in der Instanz aber 3 Referenzen: Vorgänger / Nachfolger Node und dann die Referenz zu dem Wert. Mit dieser vereinfachten Variante wären wir also schon bei 3n an Anzahl Referenzen. Und das ist extrem niedrig geschätzt!

Somit haben wir in der LinkedList deutlich mehr Speicherbedarf als in der ArrayList. Da ist also ein deutlicher Faktor zu sehen (Wenn man bei jeder Instanz nur noch eine Referenz auf die Klasse hinzu nehmen würde, wären wir schon beim Faktor 2 zum worst Case. Zum Best Case der ArrayList wäre es damit Faktor 4! - Aber nicht vergessen: ist eigentlich noch viel Schlimmer :) )

Das wäre aus meiner Sicht die Antwort auf die Frage, um die es in diesem Thread ging:
was von beidem benötigt mehr Speicher ?

Wann was genutzt werden sollte ist dabei einfach uninteressant. Aber ja - das würde ich ebenso sehen wie @Neumi5694
 

berndoa

Top Contributor
Und wenn wir noch wissen dass es genau 1000 Einträge sind, kann man auch einfach ein Array mit Länge 1000 nehmen dessen Einträge halt von einem sinnvollen Datentyp sind. Just saying :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H LinkedList<LinkedList<String>> nach ArrayList<ArrayList<String>> ? Allgemeine Java-Themen 9
C LinkedList und ArrayList in HashMap Allgemeine Java-Themen 4
R ArrayList, LinkedList oder Set Allgemeine Java-Themen 9
N ArrayList oder LinkedList? Allgemeine Java-Themen 15
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
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
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

Ähnliche Java Themen

Neue Themen


Oben