Liste sortieren

Allgemein

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.

Sort Objekt

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; } }
Negativ Integer:
Aktuelles Objekt ist kleiner als Compare Objekt
Zero:
Aktuelles Objekt ist gleich Compare Objekt
Positiv Integer:
Aktuelles Objekt ist grösser als Compare Objekt

Spezieller Vergleich

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()); }
Locale.GERMAN:
Sortierung nach deutschen Sprachregeln
Collator.SECONDARY:
Sortierstärke bewirkt a == A, a < ä

Sortierung

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);

Sourcen

Die folgenden beiden Klassen demonstieren eine deutsche Sortieren anhand Vorname und Nachname der Objekte:
SortList
SortObject

Johannes Hammoud Liste sortieren 25.02.2006

I Coding : Community über Java Programmierung

Sprache Englisch+-

Java JSF JavaScript HTML CSS NetBeans GlassFish MySQL

Impressum

Besuche
6307304
Heute
466