Jetzt möchte ich gerne eine Collection haben mit diesem Datentyp (könnte auch ein Array sein)
Vorzugsweise wäre mir ne List eigentlich lieb, aber ich weiß halt nicht ob das damit geht:
Die Liste zeigt ja dann auf meinen Datentyp, welcher 2 Werte hat, distance und key. Jetzt möchte ich das sich die Collection/Liste/Array (was auch immer) sowohl nach distance, als auch nach key sortieren lässt.. Funktioniert sowas bzw gibt es sowas ueberhaupt?
Ansonsten bräuchte ich halt gleich sortiertes einfügen, aber auch hier hab ich nichts gefunden, das Problem ist halt, das in der Collection 2 unterschiedliche Werte die ganze Zeit gespeichert sind..
Wenn key tatsächlich ein Key ist, könntest Du eine SortedMap z.B. TreeMap verwenden, dann könntest Du Dir auch die Definition einer eigenen Klasse sparen.
Ansonsten kann man auch andere Listen nehmen z.B. ArrayList. Wenn Du Dein Objekt dann noch Comparable implementieren lässt, kann man die Liste relativ einfach sortieren. Das Sortieren beim Einfügen müsstest Du dann selbst anstossen.
Die Liste zeigt ja dann auf meinen Datentyp, welcher 2 Werte hat, distance und key. Jetzt möchte ich das sich die Collection/Liste/Array (was auch immer) sowohl nach distance, als auch nach key sortieren lässt.. Funktioniert sowas bzw gibt es sowas ueberhaupt?
Ich würd gern mit "Generics" arbeiten, aber auch das ist irgendwie noch ein Thema welches sehr verschwommen ist
Das CompareTo hab ich so aehnlich auf ner anderen Seite gefunden und das klappt auch, jetzt sortiert er mir das nach der distance wenn ich einfach nur Collections.sort() aufrufe..
Könntet ihr mir aber vllt ein kleines Beispiel geben wie ich das mit dem comparator machen würde? Muss ich dafür dann ne eigene Klasse anlegen oder so? :/
Könntet ihr mir aber vllt ein kleines Beispiel geben wie ich das mit dem comparator machen würde? Muss ich dafür dann ne eigene Klasse anlegen oder so? :/
Genauso, auch hier musst Du eine Methode compareTo() implementieren. Mittels Comparator kann man halt Listen unabhängig von der im Objekt definierten compareTo() Methode sortieren.
In Deinem Code bekommt bei distance Gleichheit irgendein Objekt den Vorzug, das könnte man noch genauer spezifizieren, in dem man zusätzlich die keys vergleicht - falls notwendig.
Hm.. dann würde das casten vom objekt zum mydata wegfallen richtig?
Ich hab mir gerade mal die Insel n bisschen genauer durchgelesen und ich glaube ich habs verstanden. Nur eins verwundert mich:
static <T> void sort( T[] a, Comparator<? super T> c )
Vergleicht die Objekte mit einem externen Comparator. Falls die Objekte auch noch Comparable implementieren, wird diese Sortierordnung nicht genutzt.
Mein Objekt darf also kein Comparable implementieren, wenn ich über einen Comparator sortieren möchte? Oder ist damit gemeint, dass dann die compareTo von dem Objekt nicht genutzt wird? Das zweite wäre meines erachtens sinnvoller.. wahrscheinlich hat es sich damit auch schon erledigt ^^'
Java ist recht komplex, aber wenn man erstmal schritt für schritt dem kern der sache naeher kommt sogar ganz logisch.. wobei mir irgendwie die records fehlen, das geht hier in java nur mit klassen oder?
Mein Objekt darf also kein Comparable implementieren, wenn ich über einen Comparator sortieren möchte? Oder ist damit gemeint, dass dann die compareTo von dem Objekt nicht genutzt wird? Das zweite wäre meines erachtens sinnvoller.. wahrscheinlich hat es sich damit auch schon erledigt ^^'