Bei der Entwicklung von Applikationen kommt es oft vor, dass man eine Liste mit komplexen Objekten sortieren muss. Lokale Sprachgegebenheiten und Sonderzeichen müssen dabei ebenfalls berücksichtigt werden.
Als erstes muss in das zu sortierende Objekt selbst eine Vergleichsroutine eingebaut werden. Später wird während des eigentlichen Sortiervorgangs diese Methode zum Vergleichen zweier Objekte aufgerufen. Die aufrufende Klasse gibt den Objekten anhand des Ergebnisses einen höheren oder niedrigeren Index in der Liste.
Das Sort-Objekt muss dazu das Interface Comparable implementieren. In der dort definierte Vergleichsmethode compareTo, die man in das Sort-Objekt einbaut, kann man nun zwei Objekte auf eine beliebige, individuelle Weise vergleichen.
public class MyObject implements Comparable<MyObject>
{
public int compareTo(MyObject compareObject)
{
if (getNumber() < compareObject.getNumber())
return -1;
else if (getNumber() == compareObject.getNumber())
return 0;
else
return 1;
}
}
Zur spezielleren Sortierung von Objekten benutzt man die Klasse Collator, mit der man den Vergleich individuell einstellen kann. Das setzten einer Sortierstärke bewirkt beispielsweise ob Gross-/Kleinschreibung unterschieden werden soll. Desweiteren können lokale Spracheigenheiten, wie deutsche Umlaute, beim Sortieren mit einbezogen werden.
public int compareTo(MyObject compareObject)
{
collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.SECONDARY);
return collator.compare(getName(), compareObject.getName());
}
Zur eigentlichen Sortieren der Liste wird die Klasse Collections benutzt. Die Methode sort kann ein Liste von Objekten sortieren, wobei die vorher implementierte Methode compareTo verwendet wird, um zwei Objekte zu vergleichen.
List<MyObject> list = new ArrayList<MyObject>();
list.add(new MyObject("Jörg"));
list.add(new MyObject("Mandy"));
list.add(new MyObject("Jason"));
Collections.sort(list);
Die folgenden beiden Klassen demonstieren eine deutsche Sortieren anhand Vorname und Nachname der Objekte:
SortList
SortObject
Johannes Hammoud Liste sortieren 25.02.2006