Donnerstag, 26. Februar 2009

 

Array sortieren

Man kann ein Array von einem bestimmten Typ leicht mit der Methode sort() aus der Klasse java.util.Arrays sortieren, wenn die Objekte das Interface Comparable implementiert. Dieses Interface verlangt, dass eine Methode

public abstract int compareTo(Object other);
implementiert wird. Diese Methode wird verwendet, um Objekte miteinander zu vergleichen. Der Typ 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.

Labels: , , ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]