Wie funktioniert LinkedList arbeiten intern in Java?
Soweit ich weiß, wurde das Konzept einer verketteten Liste, ist ein Bündel von Objekt miteinander verbunden, indem ein 'weiter' und manchmal ein 'vorher' - Attribut, um die traverse Objekte.
Bemerkte ich in Java, können Sie ein LinkedList-Objekt...aber behandeln Sie es wie ein array/Liste/Reihenfolge mit den gleichen Methoden wie .add(), .get(), etc.
So, ist LinkedList intern ein array-like sequence?
- Wenn Sie sehen möchten der Umsetzung, der Blick für den source-code von
java.util.LinkedList
die Sie hier finden können in der Dateisrc.zip
in Ihrem JDK-Installationsverzeichnis. - Oder einen Blick auf die Quelle: docjar.com/html/api/java/util/LinkedList.java.html
- Sie können daran interessiert sein, meine Interne Leben der LinkedList im java tutorial.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Es ist eine Reihe von Instanzen von a private geschachtelte Klasse
Entry
, dienext
,previous
undelement
Referenzen. Beachten Sie, dass Sie haben gefunden das sich selbst durch einen Blick in den Quelltext, die mit dem JDK.Der Grund, warum diese interne Struktur wird nicht ausgesetzt ist, dass es verhindert, dass die Struktur beschädigt werden und z.B. mit einer Schleife. Und der einheitliche Zugang über den
List
undDeque
Schnittstellen erlaubt die polymorphe Verwendung.ArrayList
wie Peter erwähnt in seinem Kommentar hier.LinkedList ist eine Kette von Entitäten, in der jede Person weiß über die nächsten ein,
so get(index) Betrieb erfordert das Durchlaufen dieser Kette mit Zähler.
Aber diese Liste optimiert für das hinzufügen und löschen von der Lage (in dem Fall, wenn ich-element in der Liste oder löschen-element aus der Mitte verkettete Liste besser abschneidet)
Einer LinkedList in Java funktioniert genauso wie man es erwarten würde, es zu tun. Wenn Sie mit den amtlichen Sammlungen LinkedList dann wird es in der Tat eine eine Reihe von Objekt miteinander verbunden, indem ein 'weiter' und manchmal 'Vorherige'.
Und ja, es hat eine
get(int index)
Methode ist überraschend, denn es wäre nicht sehr effizient, da müssen Sie am Anfang beginnen und zählen Sie Ihre Weise oben in der Liste zu finden, dieindex
- TEN Eintrag und das ist nicht das, was LinkedLists sind gut. Der Grund, warum es da ist, ist da LinkedList implementiert die Liste - Schnittstelle. Dies ist etwas, das Sie mit ALLEN Listen.Jedoch, würden Sie wahrscheinlich versuchen zu vermeiden, mit einer LinkedList, wenn die meisten Ihren Zugriff darauf ist durch die
get(int index)
Methode, der wäre eindeutig ineffizient. Sie wäre vielleicht noch besser, eine ArrayList.ich weiß linkedlist ist wie das, was Sie sagte, im ersten Absatz. jedes Objekt hat zwei Referenzen, rief er in den vorherigen und es geht weiter.
im Gegensatz zu Arrays, die arbeitet sequentiell (in C ist es genau das, gespeichert in der Reihenfolge. ich denke, dass java einfach nur das gleiche macht, das ist, warum können wir nicht die Größe eines Arrays), - Liste von verweisen. so logisch es funktioniert langsamer als array enthält.
Ist es möglich zu implementieren, die ein Objekt, das funktioniert wie ein array, mit einer verlinkten Liste. Im Vergleich zu arrays, einige Operationen schneller und manche langsamer. Zum Beispiel, ruft
get()
für ein element in der Nähe des Ende sein könnte, sehr viel langsamer mit einer verlinkten Liste als ein array. Aber, es ist immer noch möglich.Auf der anderen Seite löschen Sie ein element aus der Mitte einer verknüpften Liste wird schneller sein als die entsprechende operation durchgeführt unter Verwendung von arrays.
Nicht wirklich. Link-Liste wird zur Verfügung gestellt von der Sammlung und durch gutes design können Sie eine double linked list. Jetzt ist es nicht wie bei Arrays, denn diese Objekte werden nicht über Indizes verfügen, und sind nicht die Elemente innerhalb des Containers d.h. Liste. Daher gehen Sie durch die Bestimmung der nächsten und vorherigen und diktieren, was der nächste Schritt ist. Sie alle haben die gleichen Methoden, weil Sie wiederum sind Sammlungen, wie ich sagte.
KEINE Es ist Doppelt-verkettete Liste-Implementierung.
Intern wird es mit einem sogenannten 'slab allocator' -- dies ist im Grunde eine verknüpfte Liste von kleinen arrays. Jedes mal, wenn Sie ein Objekt, prüft es, ob es Raum in der Platte, und wenn dem so ist, stellt das Objekt dort. Ansonsten weist es eine neue Platte und legt das Objekt in das erste element der Platte.
Diese Technik minimiert Speicher-Allokation der Gemeinkosten -- wenn Sie fügen Sie eine Menge von Elementen zu einer verknüpften Liste, das wäre eine Menge von kleinen Speicherzuordnungen, die viel Zeit in Anspruch nehmen, und die slab-allocators minimieren, dass