erstmal möchte ich als Neuling im Forum "Hallo" sagen, ich fange grade an etwas tiefer in Java vorzudringen, und stehe grade vor dem Zaun der mich vor dem Wissen abhalten will, wie man ein 2D Array sortieren kann...
Wenn ich ein Array habe das wie folgt aufgebaut ist:
nun möchte ich dieses Array möglichst performant nach dem Wert im 2ten Index sortieren (also 10 bzw. 20) - wie ist das möglich? Ich nehme mal an das das schon mal jemand vor mir gelöst hat
Ich sehe bei Arrays.sort allerdings nicht wo ich da ein 2D array angeben kann, und bestimmen welchen Index der 2ten dimension er zum vergleichen nehmen soll.
Kannst Du mir bitte ein kleines Beispiel machen?
soll so sortiert werden, das der 2te Index in der 2ten Dimension benutzt wird....also das dann folgendes rauskommt:
Code:
silh[1][0] = 3;
silh[1][1] = -10; // <-- die stelle wird verglichen, deshalb dies am Anfang
silh[0][0] = 1;
silh[0][1] = 0;
silh[1][0] = 2;
silh[1][1] = 1;
Ich denke also das ich eine Methode bräuchte, bei welcher man bestimmen kann welcher Index verwendet wird, oder?
Danke nochmals für die Antwort, ich bekomme allerdings diesen Compiler-Error in Eclipse:
java.lang.Error: Unresolved compilation problems:
The type Comparator is not generic; it cannot be parameterized with arguments <int[]>
Syntax error, parameterized types are only available if source level is 5.0
Schalt unter "Window > Preferences > Java > Compiler" alles auf 5.0 um. Unter Umständen musst du dir auch eine neuere Version der JRE/von Eclipse besorgen :wink:
(Ansonsten wäre eine Variante zu überlegen, wie man das halt ohne Generics machen würde. Es ist nicht allzuschwer...)
Ok, mit ein bißchen Hirn auf meiner Seite hätte ich da ja auch selbst kapieren können
Es klappt jetzt! Vielen Dank!
Wegen das ganze "ohne Generics" : Die Sache ist, da ich eigentlich nicht in Eclipse arbeite, sondern in *hust* processing....da ist das nicht ganz unproblematisch auf jre 5 zu arbeiten afaik...deshalb wäre ich ausserordentlich an einer Lösung interessiert die nichts auf der 5er Version benutzt falls das möglich ist...?
der comparator ohne generics sieht quasi genauso aus. der unterschied ist, dass die compareTo() dann als parameter zwei objects benötigt. du musst dann in der compareTo() auf die richtigen objekte casten (in deinem fall int[]).
Funktioniert, sogar im beschränkten Processing.
Vielen Vielen Dank, ihr habt mir wirklich sehr geholfen und meine Motivation am Leben erhalten
Eine Frage dazu noch: Wäre es möglich das ich anstatt Object gleich int übergebe und mir so das konvertieren sparen? Oder geht genau das nicht ohne <int[]> ?
Jop, genau das geht nicht (es sei denn, du schreibst dir einen eigene Sortieralgorithmus...). Deshalb wurde die Generics auch eingeführt :wink:
Ich weiss gerade nicht, ob "einArray.clone()" funktioniert, aber schreib dir doch einfach eine kleine Methode. Mit "System.arraycopy" kann man ziemlich schnell ganze Arrays umkopieren.
Müsste ungefähr so funktionieren:
Code:
public int[][] clone( int[][] original ){
int[][] clone = new int[original.length][];
for( int i = 0; i < clone.length; i++ ){
clone[i] = new int[ original[i].length ];
System.arraycopy( original[i], 0, clone[i], 0, clone[i].length );
}
}