Wie eine verknüpfte Liste in Java zu sortieren

August 3

Eine verknüpfte Liste ist einer der primären Typen von Datenstrukturen in der Welt der Programmierung. Es ist eine Anordnung von Knoten, die sowohl die Daten als auch die Verweise zeigen auf den nächsten Knoten enthält. Um eine verknüpfte Liste in Java zu sortieren, ist eine verknüpfte Liste-Klasse, die mit der Collection-Framework, die Algorithmen arbeitet wie Sortierung implementiert.

Anweisungen

Sortieren einer verknüpften Liste in Java

1 Deklarieren Sie die verknüpfte Liste, durch Erstellen eines neuen Objekts LinkedList und eine LinkedList-Variable zuweisen. LinkedList erbt von der generischen List-Klasse, sodass jede Methode, die eine Liste akzeptiert auch eine LinkedList-Objekt akzeptiert. ""LinkedList l = new LinkedList();""

2 Objekte des gleichen Typs (z. B. ganze Zahlen) zur Liste hinzufügen. Diese können Objekte eines beliebigen Typs sein sollte, um eine verknüpfte Liste zu sortieren, sie jedoch alle desselben Typs.

3 Verwenden Sie die List.addFirst-Methode zum Einfügen von neuer Objekten an den Anfang der Liste, so dass alle Objekte, die hinzugefügt in umgekehrter Reihenfolge werden. Wenn Sie diese am Ende der Liste hinzufügen möchten, verwenden Sie List.addLast-Methode.""list.addFirst(1); list.addFirst(3); list.addFirst(2);""

4 Verwenden Sie einen Iterator durchlaufen der Liste, und sie vor dem Drucken und danach zu sehen, was tut die Sort-Methode.""for( Iterator i = list.iterator(); i.hasNext(); ) { System.out.println(i.next()); }""

Sortierung mit standardmäßigen und benutzerdefinierten Komparatoren

5 Sortieren Sie die Liste mit den Standard-Komparator. Ein Komparator ist ein Objekt, das zwei Objekte vergleicht. Das Standard-Comparator-Objekt verwendet die weniger als Operator, also die Liste in aufsteigender Reihenfolge sortiert werden. Um die Liste zu sortieren, verwenden Sie die statische Collections.sort-Methode.""Collections.sort(list);""

6 Sortieren Sie die Liste mit einem benutzerdefinierten Komparator schriftlich eine Klasse implementiert die Schnittstelle Comparator und übergibt ihm eine Instanz als Argument zu sortieren. Die Klasse, die Comparator implementiert, hat nur einzelne Methode implementieren "vergleichen."""public class GreaterThan implements Comparator {@Override public int compare(Object arg0, Object arg1) { int x = (Integer)arg0; int y = (Integer)arg1; if(x > y) { return -1; } else if(x == y) { return 0; } else { return 1; } }}""

7 Verwenden Sie den Aufruf von Collections.sort, indem Sie eine neue Instanz an GreaterThan als zweites Argument übergeben. Da Objekte, die größer sind zuerst sortiert werden, wird die Liste in absteigender Reihenfolge nicht in aufsteigender Reihenfolge sortiert werden. Als Alternative Wenn Sie eine Liste der Objekte einer benutzerdefinierten Klasse sortieren sind haben Sie selbst geschrieben Klasse vergleichbare Schnittstelle anstatt einer separaten Komparator-Klasse implementieren kann.""Collections.sort(list, new GreaterThan());""

Tipps & Warnungen

  • Es ist problematisch, verwenden ein Integer für Schleife und die List.size() Methode durchlaufen. Durchlaufen einer verknüpften Liste ist ein rechnerisch aufwändiger Vorgang. Wenn Sie den Indexoperator verwenden (wie l[2]) wie mit einem Array von Java hat die Liste durchlaufen, bis sie erhält 2 indiziert. Für die kleinen Listen Dies ist kein Problem, aber mit etwas größer, mit dem Indexoperator durchlaufen wird sehr ressourcenintensive.
  • Es spielt keine Rolle, wie das Listenobjekt implementiert wird, da die LinkedList dieselbe Schnittstelle implementiert.
  • Die Compare-Methode sollte-1 Wenn arg0 vor arg1, 0 sortiert werden sollen, wenn gleich sortiert werden sollen und 1 zurückgeben, wenn arg1 vor arg0 sortiert werden sollen.
  • Das Iteratorobjekt stellt sicher, dass jeder Knoten in der Liste nur einmal besucht wird. Dies ist eine wichtige Sache zu erinnern, wie besuchenden Knoten unnötig Datenstrukturen bis zu dem Punkt missbrauchen können, die Ihr Programm kaum ausgeführt werden.