Donnerstag, 26. Februar 2009
Array sortieren
Man kann ein Array von einem bestimmten Typ leicht mit der Methode
liefert folgende Ausgabe:
Will man Objekte eines eigenen Typs sortieren, dann sieht das für Objekte mit einer Nummer und einem String etwa so aus:
Das Array wurde sortiert.
sort()
aus der Klasse java.util.Arrays
sortieren, wenn die Objekte das Interface Comparable
implementiert. Dieses Interface verlangt, dass eine Methodeimplementiert wird. Diese Methode wird verwendet, um Objekte miteinander zu vergleichen. Der Typ
public abstract int compareTo(Object other);
Object
wird dann für die konkrete Implementierung durch den benötigten Datentyp ersetzt (wobei man natürlich auch bei Object
bleiben könnte, da alle Klassen von Object
erben). compareTo()
liefert 0, wenn die Objekte "gleich" sind, einen Wert kleiner 0, wenn das aktuelle Objekt "kleiner" als das andere (other
) ist und einen Wert größer 0, wenn das aktuelle Objekt "größer" als das andere ist.String
implementiert dieses Interface bereits:
String[] arr = { "hallo", "du", "da", "wo", "bist", "du" };
java.util.Arrays.sort(arr);
System.out.println(java.util.Arrays.toString(arr));
liefert folgende Ausgabe:
[bist, da, du, du, hallo, wo]
Will man Objekte eines eigenen Typs sortieren, dann sieht das für Objekte mit einer Nummer und einem String etwa so aus:
class Data implements Comparable<Data> {
int nr;
String name;
Data(int nr, String name) {
this.nr = nr;
this.name = name;
}
public String toString() {
return String.format("%d -> %s", nr, name);
}
public int compareTo(Data other) {
int ret = nr - other.nr; // Nummer vergleichen
if (ret == 0) { // nun auch nach String vergleichen
ret = name.compareTo(other.name);
}
return ret;
}
}
Data[] data = {
new Data(23, "Thomas"), new Data(1, "Alfred"), new Data(2, "Brigitte"),
new Data(23, "Harald"), new Data(12, "Manfred"),
};
java.util.Arrays.sort(data); // SORTIEREN
System.out.println(java.util.Arrays.toString(data));
Arrays.toString(array)
gibt den Inhalt eines Arrays aus. Daher wird bei obigem Codestück folgendes ausgegeben:
[1 -> Alfred, 2 -> Brigitte, 12 -> Manfred, 23 -> Harald, 23 -> Thomas]
Das Array wurde sortiert.
Abonnieren Posts [Atom]
Kommentar veröffentlichen