LinkedList vs. ArrayList

CodeIt

Aktives Mitglied
Hallo,
ich lese immer wieder, dass ArrayList schneller beim indexbasierten Zugriff ist.
Beim Durchlaufen einer LinkedList wie im folgenden Beispiel mit einer
For-Schleife frage ich jedoch schon, ob dies auch hier so ist, dass der Zugriff auf
die LinkedList langsamer ist als auf eine ArrayList:

Code:
LinkedList<int> linkList = new LinkedList<int>();
linkList.add(1);
linkList.add(11);
linkList.add(111);
for(int i: linkList){
      System.out.println(i);
}

Hier wird doch lediglich durch die LinkedList iteriert, oder....warum sollte
der Zugriff hier langsamer sein als bei einer ArrayList welche anhand
einer for-Schliefe durchlaufen wird?


Vielen Dank
 

Javinner

Top Contributor
Grundkurs Programmieren in Java hat gesagt.:
Beide Namen sind Programm. W¨ahrend die Klasse ArrayList intern mit einem
Feld arbeitet, werden die Elemente von Objekten der Klasse LinkedList ¨uber
Referenzen miteinander

verlinkt“. Durch diese unterschiedlichen Speicherfor-
men, die Abbildung 12.3 verdeutlicht, ergeben sich f¨ur die beiden Klassen unter-
schiedliche Laufzeiten bei den Standardoperationen auf ihren Objekten. W¨ahrend
der Zugriff auf Elemente in ArrayList-Objekten in der Regel f¨ur alle Elemente
gleich schnell erfolgen kann, ist das Einf¨ugen und L¨oschen von Elementen (auf-
grund der notwendigen Verschiebungen der Feldelemente) wesentlich aufw¨andi-
ger als in LinkedList-Objekten, wo es gen¨ugt, die Referenzen auf die jeweiligen
Vorg¨anger- und Nachfolger-Objekte des neuen bzw. gel¨oschten Objekts richtig zu
setzen.
 

Anhänge

  • ArrayListLinkedList.PNG
    ArrayListLinkedList.PNG
    72,5 KB · Aufrufe: 131

Blender3D

Top Contributor
Der Zugriff in einem Array passiert mittels Index. Das bedeutet direkt. Wenn ich aber in einer Liste auf das 10te Element zugreifen will, muss ich die Liste vom Anfang bis zum 10ten Element durchlaufen bis ich darauf zugreifen kann. Das bedeutet: Deine Schleife muss bei jedem Zugriff bis zum jeweiligen Element laufen. Die ArrayList verwendet intern ein Array das bei Bedarf dynamisch vergrößert wird. ( Was dann ebenfalls etwas Zeit in Anspruch nimmt ). Sie kompensiert den Nachteil des Arrays, das wenn es einmal angelegt wurde eine maximale Größe hat und den oben erwähnten Zugriffsnachteil der Liste.

for(int i: linkList){
System.out.println(i);
}
So nicht, besser mittels Iterator dann ist sie gleichschnell wie ein Array, weil die Liste nur einmal durchlaufen wird.
Code:
    int[] array = { 1, 2, 3, 4, 5, 7, 8, 9, 10 };
        LinkedList<Integer> list = new LinkedList<Integer>();     
        for( int i = 0; i < array.length; i++ )
            list.add( array[i]);
        Iterator<Integer> it = list.iterator();
        while (it.hasNext()) {
            System.out.print(it.next().toString() +" ");

        }

;)
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Wenn ich aber in einer Liste auf das 10te Element zugreifen will, muss ich die Liste vom Anfang bis zum 10ten Element durchlaufen bis ich darauf zugreifen kann. Das bedeutet: Deine Schleife muss bei jedem Zugriff bis zum jeweiligen Element laufen.
zusätzliche kleine Verbesserung: LinkedList läuft je nach Index vor- oder rückwärts, muss also maximal die halbe Liste und somit beim letzten Element also nur eins durchlaufen.
 
Zuletzt bearbeitet:

Javinner

Top Contributor
Blender3D hat gesagt.:
So nicht, besser mittels Iterator dann ist sie gleichschnell wie ein Array, weil die Liste nur einmal durchlaufen wird
Java ist auch eine Insel hat gesagt.:
Iterator und erweitertes »for«
Stößt der Compiler auf ein erweitertes for, und erkennt er rechts vom Doppelpunkt den Typ Iterable, so erzeugt er Bytecode für eine Schleife, die den Iterator und seine bekannten Methoden hasNext() und next() nutzt
 

CodeIt

Aktives Mitglied
Vielen Dank an alle.
Da ich die Liste ja nur durchlaufen möchte, wäre in diesem Fall also die LinkedList genauso schnell wie die ArrayList.
Da ich aber weder in die Liste etwas löschen oder einfügen möchte, wäre hier dann evtl. doch ArrayList die bessere Wahl, da sie weniger Speicher benötigt als eine LinkedList.
 

CodeIt

Aktives Mitglied
Danke,
Vielleicht noch ein zusätzliche Frage: wenn ich jetzt z.B. durch die Liste iterieren möchte und bei jeder Iteration jeweils das erste Element entfernen möchte, was wäre dann besser?
 

Javinner

Top Contributor
LinkedList und ArrayList implementieren das Interface Iterable<E>, welches wiederum Iterator<T> iterator() Methode anbietet. Interface Iterator<E> bietet eine Methode remove() an, welches das Löschen eines Elementes aus der Liste erlaubt, jedoch kannst du das zu löschende Element nicht wählen:
Java:
public class Test
{

    public static void main(String[] args) throws IOException
    {

        LinkedList<Integer> lList = new LinkedList<>();
        lList.add(1);
        lList.add(2);
        lList.add(3);
        lList.add(4);
        lList.add(5);

        System.out.println(Arrays.asList(lList));
        System.out.println(lList.size());
        lList.remove();

        Iterator it = lList.iterator();
        while (it.hasNext()) {
            System.out.println(it.hasNext());
            System.out.println(Arrays.asList(lList));
            lList.remove();
          
        }

        System.out.println(Arrays.asList(lList));
        System.out.println(lList.size());

        lList.add(1);
        lList.add(2);
        lList.add(3);
        lList.add(4);
        lList.add(5);

        System.out.println(Arrays.asList(lList));
        System.out.println(lList.size());
        lList.remove();
        System.out.println(Arrays.asList(lList));
        System.out.println(lList.size());

    }

}
/** Konsolenausgabe */
[[1, 2, 3, 4, 5]]
5
true
[[2, 3, 4, 5]]
true
[[3, 4, 5]]
true
[[4, 5]]
true
[[5]]
[[]]
0
[[1, 2, 3, 4, 5]]
5
[[2, 3, 4, 5]]
4

ArrayList hat jedoch listIterator() und listIterator(int index) Methoden von Interface ListIterator<E> geerbt, welches wiederum vom Interface Iterator<E> erbt.
 

CodeIt

Aktives Mitglied
LinkedList und ArrayList implementieren das Interface Iterable<E>, welches wiederum Iterator<T> iterator() Methode anbietet. Interface Iterator<E> bietet eine Methode remove() an, welches das Löschen eines Elementes aus der Liste erlaubt, jedoch kannst du das zu löschende Element nicht wählen:
Java:
public class Test
{

    public static void main(String[] args) throws IOException
    {

        LinkedList<Integer> lList = new LinkedList<>();
        lList.add(1);
        lList.add(2);
        lList.add(3);
        lList.add(4);
        lList.add(5);

        System.out.println(Arrays.asList(lList));
        System.out.println(lList.size());
        lList.remove();

        Iterator it = lList.iterator();
        while (it.hasNext()) {
            System.out.println(it.hasNext());
            System.out.println(Arrays.asList(lList));
            lList.remove();
        
        }

        System.out.println(Arrays.asList(lList));
        System.out.println(lList.size());

        lList.add(1);
        lList.add(2);
        lList.add(3);
        lList.add(4);
        lList.add(5);

        System.out.println(Arrays.asList(lList));
        System.out.println(lList.size());
        lList.remove();
        System.out.println(Arrays.asList(lList));
        System.out.println(lList.size());

    }

}
/** Konsolenausgabe */
[[1, 2, 3, 4, 5]]
5
true
[[2, 3, 4, 5]]
true
[[3, 4, 5]]
true
[[4, 5]]
true
[[5]]
[[]]
0
[[1, 2, 3, 4, 5]]
5
[[2, 3, 4, 5]]
4

ArrayList hat jedoch listIterator() und listIterator(int index) Methoden von Interface ListIterator<E> geerbt, welches wiederum vom Interface Iterator<E> erbt.
Danke,
wäre dann folgender Code langsamer?:
Code:
Integer zahl;
while(lList.size() >0){
       zahl = lList.removeFirst();
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
C ArrayList vs LinkedList vs ? Java Basics - Anfänger-Themen 15
O LinkedList zu ArrayList Java Basics - Anfänger-Themen 4
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
I LinkedLIst / ArrayList Konstruktor Java Basics - Anfänger-Themen 4
S Speichermangel ArrayList/LinkedList Java Basics - Anfänger-Themen 3
B Unterschied ArrayList und LinkedList Java Basics - Anfänger-Themen 5
S Implementierung gegen Interfaces / List, ArrayList, LinkedList Java Basics - Anfänger-Themen 11
J LinkedList, Collection, ArrayList, List. was denn bitte? Java Basics - Anfänger-Themen 6
A LinkedList implementieren Java Basics - Anfänger-Themen 32
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
Düsseldorf2002 Datentypen Verschachtelte LinkedList Java Basics - Anfänger-Themen 5
Düsseldorf2002 Datentypen Zwei dimensionale LinkedList Java Basics - Anfänger-Themen 8
B Warteschlange erstellen mit LinkedList ? Java Basics - Anfänger-Themen 6
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
G Java LinkedList remove Methode Java Basics - Anfänger-Themen 5
G Java LinkedList Java Basics - Anfänger-Themen 6
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
S Mit einer LinkedList vorwärts und rückwärts iterieren Java Basics - Anfänger-Themen 6
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
G Java LinkedList Java Basics - Anfänger-Themen 3
B LinkedList add-Methode Java Basics - Anfänger-Themen 10
F Windows in LinkedList registrieren Java Basics - Anfänger-Themen 3
A Hilfe, LinkedList Java Basics - Anfänger-Themen 2
H Knoten-Reihenfolge einer LinkedList invertieren Java Basics - Anfänger-Themen 11
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
P Quellcode LinkedList Java Basics - Anfänger-Themen 2
F Collection Aufgabe mit LinkedList Java Basics - Anfänger-Themen 3
N Hilfe bei verknüpfter Liste - Linkedlist Java Basics - Anfänger-Themen 11
P Datentypen LinkedList: Kopie behält Referenz? Java Basics - Anfänger-Themen 3
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
L Problem mit LinkedList Java Basics - Anfänger-Themen 3
F In LinkedList einen Wert ersetzen oder neu einfügen Java Basics - Anfänger-Themen 7
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
TechGirl LinkedList - kurze allgemeine Frage Java Basics - Anfänger-Themen 17
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
S LinkedList mit Input vergleichen. Java Basics - Anfänger-Themen 5
C Bei der LinkedList auf Palindrom überprüfen Java Basics - Anfänger-Themen 4
F Element aus LinkedList löschen Java Basics - Anfänger-Themen 3
A LinkedList: Probleme beim Auslesen Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
S Jfreechart mit LinkedList befüllen Java Basics - Anfänger-Themen 1
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
K LinkedList aus Arrays ( Lösungsraum Mastermind ) Java Basics - Anfänger-Themen 5
Z Compiler-Fehler LinkedList Fragen Java Basics - Anfänger-Themen 4
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
Farbenfroh int in LinkedList einsortieren Java Basics - Anfänger-Themen 4
W Klassen LinkedList funktioniert nicht Java Basics - Anfänger-Themen 6
X LinkedList - Index eines Objekts Java Basics - Anfänger-Themen 2
S Strings in eine LinkedList schreiben und auslesen? Java Basics - Anfänger-Themen 4
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
T Datentypen gleichmäßiges mischen von 2 LinkedList Java Basics - Anfänger-Themen 3
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
J Datentypen Array von einer LinkedList Java Basics - Anfänger-Themen 5
R LinkedList Java Basics - Anfänger-Themen 8
B LinkedList remove Java Basics - Anfänger-Themen 5
J statische Methoden auf eine LinkedList initialisieren? Java Basics - Anfänger-Themen 5
G Hausaufgabe mit LinkedList und LinkedListStack verstehen Java Basics - Anfänger-Themen 6
N LinkedList-checkForComodification Java Basics - Anfänger-Themen 11
N LinkedList Java Basics - Anfänger-Themen 17
P LinkedList sortieren Java Basics - Anfänger-Themen 20
P LinkedList - Stack ... grundlegende Frage Java Basics - Anfänger-Themen 5
Z Erste Schritte LinkedList Werte abfragen und vergleichen Java Basics - Anfänger-Themen 3
B SUCHE: Threadsafe LinkedList Java Basics - Anfänger-Themen 10
Binary.Coder Wie linkedlist für Djikstra nutzen? Java Basics - Anfänger-Themen 6
M Arrays in LinkedList Java Basics - Anfänger-Themen 4
R Collections Probleme mit contains()-Methode [LinkedList] Java Basics - Anfänger-Themen 5
G Collections.binarySearch(LinkedList): cannot find method Java Basics - Anfänger-Themen 6
M LinkedList aktuelle position Java Basics - Anfänger-Themen 3
G Frage zu LinkedList Java Basics - Anfänger-Themen 15
H Dynamische Bindung mit Interfaces und LinkedList Java Basics - Anfänger-Themen 7
B Collections RandomAccessfile & Linkedlist Java Basics - Anfänger-Themen 4
V LinkedList size() Java Basics - Anfänger-Themen 2
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
D Probleme mit LinkedList Java Basics - Anfänger-Themen 6
L LinkedList vorgänger Knoten zurück geben Java Basics - Anfänger-Themen 4
S LinkedList indexOf() - geht des irgendwie schneller? Java Basics - Anfänger-Themen 23
S LinkedList<String[]> filtern und sortieren Java Basics - Anfänger-Themen 9
W LinkedList Java Basics - Anfänger-Themen 12
S Frage zum speichern der Daten in einer LinkedList Java Basics - Anfänger-Themen 2
D Fenster in LinkedList verwalten Java Basics - Anfänger-Themen 2
C HashMap mit LinkedList Java Basics - Anfänger-Themen 5
S Datentypen LinkedList Konstruktor, add Alternative Java Basics - Anfänger-Themen 2
truesoul LinkedList Problem Java Basics - Anfänger-Themen 6
M Java Generics LinkedList Java Basics - Anfänger-Themen 5
H LinkedList Element an Stelle x ausgeben? Java Basics - Anfänger-Themen 5
D LinkedList aufrufe Java Basics - Anfänger-Themen 3
S Problem mit ObjectInputStream beim Einlesen von LinkedList Java Basics - Anfänger-Themen 3
S Serialized LinkedList aus Datei Laden Java Basics - Anfänger-Themen 15
S LinkedList Java Basics - Anfänger-Themen 2
M LinkedList in anderer Klasse nutzen Java Basics - Anfänger-Themen 4
L LinkedList sortieren Java Basics - Anfänger-Themen 5
L heap space, LinkedList umspeichern Java Basics - Anfänger-Themen 15
H LinkedList mit Strings Exception Java Basics - Anfänger-Themen 3
S IndexOutofBoundsException bei linkedlist Java Basics - Anfänger-Themen 5
B Fehlersuche bei LinkedList Java Basics - Anfänger-Themen 3
B LinkedList - Berechnung des Produkts Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben