Java.util.set sortieren

Hallo

ich will ein Set sortieren nach id in meiner Klasse.

MeineKlasse hat die Felder id, name, datum, xy, yz und soll im Set nach id sortiert werden.

Wie mache ich das?

Hallo Benjamin

Deine „MeineKlasse“ muss das Interface Comparable implementieren. Eine gute Anleitung und Erklärungen dazu findest du hier:

http://www.iks.hs-merseburg.de/~uschroet/Literatur/J…

Hoffe, dass dir das weiter hilft.

Grüsse

Marcel

Ein Set hat keine Ordnung. Du musst es in ein SortedSet oder z.B. eine Liste umwandeln. Und es dann sortieren. Für die Ordnung siehe http://download.oracle.com/javase/6/docs/api/index.h….

Oder natürlich
http://www.google.de/#hl=de&source=hp&q=java+set+sor…

Hallo,

Implementierungen des Interfaces können nicht sortiert werden. Zum Sortieren eine ArrayList aus dem Set erstellen und dann mit Collections.sort(liste) sortieren. Alternativ kannst Du eine Implementierung von Comparator mit in die Sort-Methode geben, falls die natürliche Sortierung nicht ausreicht. Pseudocode:

List liste = new ArrayList(setListe);
Collections.sort(liste);

Gruß,

Rudolf

Hallo Benjamin,

es gibt mehrere Möglichkeiten dies zu tun. Am einfachsten ist, aus dem Set mittels der Methode toArray ein Array zu machen und anschließend das Array mittels Arrays.sort() zu sortieren. Die Information, dass die Klassen nach dem Feld id sortiert werden sollen, kann man mittels einer der folgenden beiden Lösungen tun:

1. Die Klasse MeineKlasse um den Typ Comparable erweitern und die Methode public int compareTo(java.lang.Object obj) implementieren. Die Klasse könnte dann etwa so aussehen:

public class MeineKlasse implements Comparable {

 private long id;

 public MeineKlasse(long id) {
 this.id = id;
 }

 @Override
 public int compareTo(MeineKlasse meineKlasse) {

 return Long.valueOf(id).compareTo(Long.valueOf(meineKlasse.id));
 }
}

So kann die Klasse dann sortiert werden:

 Set meineKlassen = new HashSet();
 meineKlassen.add(new MeineKlasse(3));
 meineKlassen.add(new MeineKlasse(1));
 meineKlassen.add(new MeineKlasse(4));
 meineKlassen.add(new MeineKlasse(5));
 meineKlassen.add(new MeineKlasse(2));

 MeineKlasse[] meineKlassenArray = new MeineKlasse[meineKlassen.size()];
 meineKlassen.toArray(meineKlassenArray);
 Arrays.sort(meineKlassenArray);
 for (MeineKlasse meineKlasse : meineKlassenArray) {
 System.out.println(meineKlasse);
 }

Für eine sinnvolle Ausgabe durch System.out.println kannst Du in Deiner Klasse die Methode toString() z.B. so überschreiben:

 @Override
 public String toString() {
 return String.valueOf(id);
 }

2. Verwendung einer weiteren Klasse vom Typ Comparator zum Sortieren

Die Implementierung könnte etwa so aussehen:

public class MeineKlasseComparator implements Comparator {

 @Override
 public int compare(MeineKlasse meineKlasse1, MeineKlasse meineKlasse2) {
 return Long.valueOf(meineKlasse1.getId()).compareTo(meineKlasse2.getId());
 }
}

So kann die Klasse dann sortiert werden:

 Set meineKlassen = new HashSet();
 meineKlassen.add(new MeineKlasse(3));
 meineKlassen.add(new MeineKlasse(1));
 meineKlassen.add(new MeineKlasse(4));
 meineKlassen.add(new MeineKlasse(5));
 meineKlassen.add(new MeineKlasse(2));

 MeineKlasse[] meineKlassenArray = new MeineKlasse[meineKlassen.size()];
 meineKlassen.toArray(meineKlassenArray);
 MeineKlasseComparator meineKlassenComparator = new MeineKlasseComparator();
 Arrays.sort(meineKlassenArray, meineKlassenComparator);
 for (MeineKlasse meineKlasse : meineKlassenArray) {
 System.out.println(meineKlasse);
 }