Sortierte Liste
-
Hallo,
und zwar benötige ich eine sortierte Liste. Also ich habe Objekte, die eine Eigenschaft(int) haben, anhand der sortiert werden soll. Nun benötige ich so etwas in der Art: liste.add(object). Wobei das Objekt an die richtige Position eingefügt werden soll.
Unsere Lehrer meinte wie sollten uns das mit einer LinkedList bauen, da es so etwas in Java nicht geben würde.
Stimmt das? Ich kann mir nicht vorstellen, dass Java eine solche Funktionalität nicht bietet. So was wird doch bestimmt öfters mal benötigt.
-
EDIT: vergesst, was ich geschrieben habe.
So ist es(meines Wissens nach) richtig:
LinkedList ist unsortiert(man kann sie aber über Collection.sort(liste) sortieren.
Einfacher ist es, ein TreeSet zu verwenden, das wird automatisch sortiert:
import java.util.TreeSet; public class Test { public static void main(String[] args) { TreeSet<O> ll = new TreeSet<O>(); O o1 = new O(); o1.a = 4; O o2 = new O(); o2.a = 2; ll.add(o1); ll.add(o2); for (O x : ll) { System.out.println(x.a); } } } class O implements Comparable<O>{ int a = 0; public int compareTo(O o) { return a - o.a; } }
Alternativ kannst du auch, glaube ich, dem TreeSet eine Comparatorklasse übergeben.
Mfg
-
Hast du schon die ganze Liste oder kommen die Element nach und nach? Wahrscheinlich möchte dein Lehrer im zweiten Fall eine LinkedList haben die ihre Element immer an die richtige Stelle einfügt, und sowas gibt es in Java nicht, zumindestens nicht in der Form, weil es zu ineffizient wäre.
Das obige Verfahren der LinkedList liegt ja in $$O(n^2)$$ und ein effizienterer Heap in $$O(n \cdot log(n))$$, deswegen gibt es dass in Java nicht als LinkedList.