Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public class MyData {
private double distance;
private int key;
public MyData() {
super();
this.distance = 0.;
this.key = 0;
}
public MyData(double distance, int key) {
super();
this.distance = distance;
this.key = key;
}
public double getDistance() {
return distance;
}
public void setDistance(double distance) {
this.distance = distance;
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
}
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 habs jetzt irgendwie hinbekommen, aber verstehen tu ich das trotzdem überhaupt nicht -.-
Ich hab meinen Datentyp jetzt wiefolgt erweitert:
Java:
public class MyData implements Comparable {
private double distance;
private int key;
public MyData() {
super();
this.distance = 0.;
this.key = 0;
}
public MyData(double distance, int key) {
super();
this.distance = distance;
this.key = key;
}
public double getDistance() {
return distance;
}
public void setDistance(double distance) {
this.distance = distance;
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
@Override
public int compareTo(Object o) {
if (this.distance == ((MyData)o).distance) return 0;
else if ((this.distance) > ((MyData) o).distance)
return 1;
else
return -1;
}
}
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 ^^'