Hat java haben eine skip-Liste implementation
Finde ich ConcurrentSkipListSet
in Java-Collection-Framework, das ist gesichert, mit einer skip-Liste. Aber gibt es eine skip-Liste in Java? Ein set funktioniert nicht in meinem Anwendungsfall. Ich brauche eine Wendeplatten-Liste, unterstützt von Duplikaten.
- Was ist es über eine skiplist, die Sie für Ihr Programm? Wenn Sie möchten, eine Wendeplatten-Liste Unterstützung Duplikate, warum man nicht einfach eine
ArrayList
? - Wendeplatten-Liste unterstützt Duplikate ... ArrayList ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da haben Sie schon erwähnt eine Liste, die sowohl mit Wendeschneidplatten (ich nehme an, Sie wollen schnelle retrieval) und müssen doppelte erlauben, würde ich Ihnen raten, gehen Sie für eine benutzerdefinierte Gruppe mit einer LinkedList oder ArrayList vielleicht.
Benötigen Sie ein Basis-Set, eine HashSet zum Beispiel, und halten Sie das hinzufügen von Werten zu. Wenn Sie das Gesicht ein Duplikat ist, ist der Wert dieser Gruppe sollte zeigen Sie auf eine Liste. So, dass Sie sowohl Schnelle abrufen und natürlich werden Sie speichern Ihre Objekte in einer Pseudo-Sammlung Weise.
Dies sollte Ihnen einen guten Wirkungsgrad für den Abruf. Ideal, wenn Sie Ihre Schlüssel nicht dupliziert, werden Sie erreichen eine O(1), da die retrieval-Geschwindigkeit.
Diese Antwort ist 3 Jahre zu spät, aber ich hoffe, es wird nützlich sein für diejenigen, die ein Java-skip-Liste von diesem moment an 🙂
Diese Lösung erlaubt Duplikate, wie Sie fragte. Ich Folge grob den guide hier http://igoro.com/archive/skip-lists-are-fascinating, so ist die Komplexität ähnlich sind, außer dass Sie löschen Kosten O(nlogn) - da ich nicht die Mühe mit doppelt verknüpften Knoten, die ich mir vorstellen würde, bringen löschen runter in O(logn).
Code umfasst: eine Schnittstelle, die skip-Liste der Implementierung der Schnittstelle und die Knoten-Klasse. Es ist auch generisch.
Können Sie die Feinabstimmung der parameter EBENEN für die Leistung, aber denken Sie an die Raum-Zeit-Abwägung.
Nutzen Sie den untenstehenden code Ihre eigenen basic skiplist :
1)Stellen Sie start und Ende zu
represent start and end of skip list
.2)
Add the nodes
undassign pointers
zum nächstenbased on
Java-code für basic-skip-Liste (Sie können weitere Funktionen hinzufügen, wenn Sie möchten):
Ausgabe:
--Simple Traversal--
1=>2=>3=>4=>5=>6=>
--Fast Lane-Traversal--
2==>4==>6==>
Beim erstellen einer
ConcurrentSkipListSet
übergeben Sie einen comparator an den Konstruktor übergeben.Können Sie einen Komparator, um Ihren
SkipListSet
Verhalten sich wie eine normale Liste.Behoben den Fehler in der implementation von @PoweredByRice. Er warf einen NPE für die Fälle, wenn der Knoten gelöscht wurde, wird der erste Knoten. Andere updates umfassen umbenannt Variablennamen und reverse drucken Bestellung der skip-Liste.
Ich genehmige die Verwendung TreeList von apache-Sammlungen und schmücken es mit SortedList von Glücklichen Java-Bibliotheken
https://sourceforge.net/p/happy-guys/wiki/Sorted%20List/
Ich behaupte nicht, dass dies meine eigene Implementierung. Ich kann einfach nicht mehr wo ich es gefunden. Wenn Sie wissen, lassen Sie mich wissen, und ich werde aktualisieren. Dieses arbeitet ziemlich gut für mich: