3598 Stimmen

Wann sollte man LinkedList statt ArrayList in Java verwenden?

Ich war schon immer jemand, der einfach nur benutzt:

List<String> names = new ArrayList<>();

Ich verwende die Schnittstelle als Typname für Tragbarkeit damit ich, wenn ich Fragen wie diese stelle, meinen Code überarbeiten kann.

Wann sollte LinkedList verwendet werden über ArrayList und andersherum?

10 Stimmen

12 Stimmen

Siehe dazu das Zitat des Autors von LinkedList stackoverflow.com/a/42529652/2032701 und Sie bekommen ein praktisches Gefühl für das Thema.

2 Stimmen

Niemals. Ich habe es einmal in meinen 25 Jahren Java-Programmierung getan und es im Nachhinein bereut.

20voto

Rajith Delantha Punkte 703

Hier ist die Big-O-Notation in beiden ArrayList y LinkedList und auch CopyOnWrite-ArrayList :

ArrayList

get                 O(1)
add                 O(1)
contains            O(n)
next                O(1)
remove              O(n)
iterator.remove     O(n)

LinkedList

get                 O(n)
add                 O(1)
contains            O(n)
next                O(1)
remove              O(1)
iterator.remove     O(1)

CopyOnWrite-ArrayList

get                 O(1)
add                 O(n)
contains            O(n)
next                O(1)
remove              O(n)
iterator.remove     O(n)

Auf der Grundlage dieser Angaben müssen Sie entscheiden, was Sie wählen :)

11 Stimmen

>>>> ArrayList add --> O(1) <- nicht wahr. In manchen Fällen muss ArrayList wachsen, um ein weiteres Element hinzuzufügen

2 Stimmen

LinkedList remove ist nicht O(1), es müsste nach dem zu entfernenden Element suchen, daher im schlimmsten Fall O(n) und im Durchschnitt O(n/2)

0 Stimmen

Ebenso wenig ist LinkedList.add() obwohl die meisten Antworten hier dies behaupten.

16voto

PhiLho Punkte 39496

Zusätzlich zu den oben genannten guten Argumenten sollten Sie beachten ArrayList implementiert RandomAccess Schnittstelle, während LinkedList implementiert Queue .

Sie befassen sich also in gewisser Weise mit leicht unterschiedlichen Problemen, die sich in Bezug auf Effizienz und Verhalten unterscheiden (siehe Liste der Methoden).

11voto

Matthew Schinckel Punkte 33617

Es hängt davon ab, welche Operationen Sie auf der Liste durchführen werden.

ArrayList ist der Zugriff auf einen indizierten Wert schneller. Viel schlimmer ist es beim Einfügen oder Löschen von Objekten.

Um mehr darüber zu erfahren, lesen Sie einen beliebigen Artikel, in dem der Unterschied zwischen Arrays und verknüpften Listen erläutert wird.

2 Stimmen

Um mehr herauszufinden, lesen Sie nicht, schreiben Sie einfach den Code. und Sie werden herausfinden, dass ArrayList Implementierung schneller als LinkedList in Einfügen und Löschen ist.

10voto

chharvey Punkte 7371

5 Stimmen

Hallo @chharvey , Link nur Antworten erhalten 6 Upvotes ? Bitte fügen Sie einige Punkte hinzu, die den Link unterstützen könnten, was ist, wenn Oracle den Link ändert?

8voto

kemiller2002 Punkte 110605

Eine Array-Liste ist im Wesentlichen ein Array mit Methoden zum Hinzufügen von Elementen usw. (und Sie sollten stattdessen eine generische Liste verwenden). Es ist eine Sammlung von Elementen, auf die über einen Indexer (z. B. [0]) zugegriffen werden kann. Sie impliziert eine Abfolge von einem Element zum nächsten.

Eine verknüpfte Liste gibt eine Abfolge von einem Element zum nächsten an (Element a -> Element b). Den gleichen Effekt können Sie mit einer Array-Liste erzielen, aber eine verknüpfte Liste gibt eindeutig an, welches Element auf das vorherige folgen soll.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X