# Liste sortieren



## Rogge (11. Okt 2007)

Hallo,

folgendes Problem. Ich fülle eine LinkedList mit einem selbst erstellten Datentyp. Wie kann ich nun die Liste nach einem bestimmten Merkmal sortieren?


```
List<Datensatz> daten = new LinkedList<Datensatz>(); // Datenbehälter.
```

Ein Datensatz sieht so aus...


```
public class Datensatz extends Player {
  private int Id, Econ, Fleet, Tech, Exp, Acc;
  private double Lvl;

  public void setEcon(int x)      { Econ=x;        }
  public void setFleet(int x)     { Fleet=x;       }
  public void setTech(int x)      { Tech=x;        }
  public void setExp(int x)       { Exp=x;         }
  public void setAcc(int x)       { Acc=x;         }
  public void setLvl(double l)    { Lvl=l;         }

  public int getEcon()            { return Econ;   }
  public int getFleet()           { return Fleet;  }
  public int getTech()            { return Tech;   }
  public int getExp()             { return Exp;    }
  public int getAcc()             { return Acc;    }
  public double getLvl()          { return Lvl;    }
}
```

Wie erreiche ich, dass die Liste beispielsweise nach dem int-Wert Econ sortiert wird? Wenn es möglich ist würde ich gerne wissen, wie man das auf- sowie auch absteigend sortieren kann.


Vielen Dank,
Rogge


----------



## Gast (11. Okt 2007)

daten.sort() ?


----------



## SlaterB (11. Okt 2007)

vielleicht nimmt sich jemand die Zeit, dir hier alles aufzuschreiben,
allgemein ist es aber müßig, den Inhalt von Lehrbüchern zu wiederholen

so grundlegende Sachen kann man hervorragend nachlesen (falls das für dich in Frage kommt):
http://www.galileocomputing.de/openbook/javainsel6/javainsel_11_004.htm


----------



## Rogge (11. Okt 2007)

Tja erm... ist ja gut und schön was in den Lehrbüchern steht, jedoch bezieht sich das dort eher auf die triviale Sortierung von Strings. Und wie sieht das nun mit meinem selbst gebastelten Datentyp aus? Wie kann ich dem klar machen, dass der das nach Econ und nicht nach Fleet oder weiß der Geier sortieren soll?!

Und nebenbei Mr. SlaterB. Wir sind hier im Anfänger-Forum. Da stellt man halt solche Fragen. Deine herablassende Art gegenüber anderen kannst du mal ganz schnell knicken.


----------



## SlaterB (11. Okt 2007)

> Und wie sieht das nun mit meinem selbst gebastelten Datentyp aus?

Tja erm.. genau diese Fragen werden in Lehrbüchern auch so genau erklärt wie du es hier kaum finden wirst. 
(natürlich nicht für deinen konktreten Fall, man muss also selber nachdenken, falls ich das ganz neutral und nicht überheblich erwähnen darf)
zudem finden sich dort die Grundlagen, mit denen man höhere eigene Sortierungen überhaupt erst anfangen kann

aber ich habe schon verstanden, dir reichen in Zukunft also kompetente Antworten wie die vom Gast weiter oben


----------



## maki (11. Okt 2007)

Auch Anfänger dürfen suchen: http://www.java-forum.org/de/viewtopic.php?p=338465#338465

Oder besser: Anfänger sollten unbedingt suchen


----------



## Rogge (11. Okt 2007)

Ich habe gesucht... anscheinend nicht gründlich genug. Jedoch werde ich jetzt noch etwas mehr suchen. Das was du mir da zeigst ist selbstgebastelter Mist. Java bietet diese Sortierung schon von Haus aus an. Wozu dann noch selbst  in der Liste umherwerkeln?!


----------



## maki (11. Okt 2007)

> Das was du mir da zeigst ist selbstgebastelter Mist. Java bietet diese Sortierung schon von Haus aus an. Wozu dann noch selbst in der Liste umherwerkeln?!


Wie meinen?


----------



## Rogge (11. Okt 2007)

Oh, ach entschuldige bitte. Das von dir hatte ich gar nicht gesehen. Mein Blilck viel gleich auf das vom Cheefrocker unter deinem Beitrag...

Cool, das werd ich gleich mal ausprobieren. Danke sehr.


----------



## Rogge (11. Okt 2007)

*Blick fiel ...


----------



## maki (11. Okt 2007)

Einen Sortieralgorythmus selbst zu implementieren ist wirklich nicht Zeitgemäß in Java


----------



## Rogge (11. Okt 2007)

Das stimmt. Sowas habe ich im Studium gehabt. Select Sort, Bubble Sort... der ganze Mist von Grund auf. Das einzige, was uns der (und das meine ich wirklich ernst) kompetente Prof nicht beigebracht hat war, wie wir die Implementierung durch Java vollziehen. Wozu die Glühbirne nochmals erfinden?!

In diesem Sinne, ich versuche mein bestes und hoffe, dass ich das mit dem für mich neuen Java-Code hinbekomme.
Danke dir nochmal dafür.


----------



## byte (11. Okt 2007)

Rogge hat gesagt.:
			
		

> Das stimmt. Sowas habe ich im Studium gehabt. Select Sort, Bubble Sort... der ganze Mist von Grund auf. Das einzige, was uns der (und das meine ich wirklich ernst) kompetente Prof nicht beigebracht hat war, wie wir die Implementierung durch Java vollziehen. Wozu die Glühbirne nochmals erfinden?!


Vielleicht hat der Prof. die Fähigkeit zu lesen und Engagement zu zeigen vorausgesetzt. Oder Du hast einfach den Unterschied zwischen Studium und Programmier-Ausbildung nicht verstanden.


----------



## Rogge (11. Okt 2007)

Oh, jetzt kommen wieder diese neunmalklugen Bemerkungen von Leuten die anscheinend alles besser machen und alles besser können. Sowas braucht dieses Forum noch! Schön, dass du endlich da bist, byto.


----------



## jPat (11. Okt 2007)

Wo ist den nun genau dein Problem?
Interface Comparable Implementieren, dann methode compareTo implemetieren. 
Dann in deiner Klasse eine Methode schreiben, die das Kriterium setzt. Fertig.


----------



## byte (11. Okt 2007)

Rogge hat gesagt.:
			
		

> Oh, jetzt kommen wieder diese neunmalklugen Bemerkungen von Leuten die anscheinend alles besser machen und alles besser können. Sowas braucht dieses Forum noch! Schön, dass du endlich da bist, byto.


Offenbar weisst Du alles besser oder warum kritisierst Du die Lehrmethoden Deines Profs?


----------



## benders (11. Okt 2007)

Hallo zusammen,

kommt bitte auf das ursprüngliche Thema zurück.

Einem Anfänger ist es doch gestattet "blöde" Fragen zustellen.
Wenn man hier im Forum keinen Sourcecode schreiben will,
sollte man einem Anfänger die richtigen Stichworte zum Google geben. Ist zwischenzeitlich (Comparator) geschehen.

Bernd


----------



## SlaterB (11. Okt 2007)

ein Link zur richtigen Seite in einem Buch, in der ca 100x Comparator steht (sowie alle anderen Stichworte, Erklärungen, Beispiele und was immer man dazu brauchen könnte), reicht nicht?


----------



## Rogge (11. Okt 2007)

Also ein Forum ist doch dazu da, auf konkrete Fragen konkrete Antworten zu liefern. Ein Verweis auf irgendein Buch zu liefern ist deswegen ziemlich ignorant, denn in Büchern wird die Materie allgemein erklärt. Und wenn man so will kann man auf jede einzelne Frage antworten, "Ließ ein Buch!". Wie bereits gesagt ist das nicht Sinn und Zweck eines Forums. Würde ich die Antwort bereits in einem Buch gefunden haben, oder danach in einem Buch suchen, würde ich nicht posten. Zudem ist eine Grundeigenschaft jedes Menschen die Bequemlichkeit. Durch eine Frage in einem Forum hofft man, nicht selbst nach der Antwort suchen zu müssen. Und sei es nur teilweise. Und wer sich davon nicht überzeugen lassen möchte kann seinen Standpunkt gerne in einem philosophischen Forum diskutieren.


----------



## SlaterB (11. Okt 2007)

deinen Standpunkt habe ich nachvollzogen (wen er auch absurd ist bei bestimmten Grundlagen-Themen) und den Unterschied zu meinem Link erkannt 

ich bezog mich allerdings auf Bernd, der das Stichwort 'Comparator' vermisste


----------



## tfa (11. Okt 2007)

Rogge hat gesagt.:
			
		

> Also ein Forum ist doch dazu da, auf konkrete Fragen konkrete Antworten zu liefern. Ein Verweis auf irgendein Buch zu liefern ist deswegen ziemlich ignorant, denn in Büchern wird die Materie allgemein erklärt. Und wenn man so will kann man auf jede einzelne Frage antworten, "Ließ ein Buch!". Wie bereits gesagt ist das nicht Sinn und Zweck eines Forums. Würde ich die Antwort bereits in einem Buch gefunden haben, oder danach in einem Buch suchen, würde ich nicht posten. Zudem ist eine Grundeigenschaft jedes Menschen die Bequemlichkeit. Durch eine Frage in einem Forum hofft man, nicht selbst nach der Antwort suchen zu müssen. Und sei es nur teilweise. Und wer sich davon nicht überzeugen lassen möchte kann seinen Standpunkt gerne in einem philosophischen Forum diskutieren.



Die Leute, die Dir hier (zu) helfen (versuchen), waren sicherlich nicht zu bequem, die Bücher zu lesen und die Grundlagen zu lernen.
Wenn Du hier Musterlösungen auf dem Präsentierteller erwartest, bist Du auf dem falschen Dampfer.


----------



## jPat (11. Okt 2007)

:gaen:


----------



## Rogge (11. Okt 2007)

tfa hat gesagt.:
			
		

> Die Leute, die Dir hier (zu) helfen (versuchen), waren sicherlich nicht zu bequem, die Bücher zu lesen und die Grundlagen zu lernen.
> Wenn Du hier Musterlösungen auf dem Präsentierteller erwartest, bist Du auf dem falschen Dampfer.



*lol* Was is denn mit dir los? Reg dich ab man!



			
				Rogge hat gesagt.:
			
		

> Wie erreiche ich, dass die Liste beispielsweise nach dem int-Wert Econ sortiert wird? Wenn es möglich ist würde ich gerne wissen, wie man das auf- sowie auch absteigend sortieren kann.



Sieht das nach einer Bitte für eine Musterlösung aus? Im war das auch die Antwort zu deiner Frage, was denn mein Problem ist. Also, immer genau hingucken bevor man irgendwas postet oder sich aufregt.


----------



## byte (11. Okt 2007)

tfa hat gesagt.:
			
		

> Die Leute, die Dir hier (zu) helfen (versuchen), waren sicherlich nicht zu bequem, die Bücher zu lesen und die Grundlagen zu lernen.
> Wenn Du hier Musterlösungen auf dem Präsentierteller erwartest, bist Du auf dem falschen Dampfer.



Zumal es in diesem Fall auch durchaus ein gut gemeinter Rat gewesen sein wird, in ein Buch zu schauen. Wenn man Java (oder eine beliebige Programmiersprache) lernt, wird man nämlich immer wieder auf solche "einfachen" Probleme stoßen, die ein Buch oder das Internet schnell beantwortet. Man ist gut beraten, wenn man sich schnell daran gewöhnt, selbst zu recherchieren, bevor man andere fragt.


----------



## Rogge (11. Okt 2007)

*Im Übrigen


----------



## Rogge (11. Okt 2007)

Boah, sagt mal, was ist denn heute los hier?

1. Ja, ich habe nach einer Antwort auf meine Frage gesucht.
2. Ja, ich habe den gleichen Artikel über das Sortieren (SlaterB) bereits gefunden, konnte damit allerdings nichts anfangen.
3. Ich poste hier meine Frage.
4. Jeder schlägt mir vor, selbst danach zu suchen oder labert irgendwelchen Mist.

Leute, esst mal was zum Mittag. Ich glaube, eure Elektrolyt-Werte sind im Keller. Soeine Dummlaberei hab ich hier ja noch nie erlebt.


----------



## SlaterB (11. Okt 2007)

es wird immer so realistisch, wenn ein kleiner Neuling meckert und natürlich im Recht ist,
während viele jahrelange seriöse Mitglieder selbstverständlich die letzten Idioten sind


----------



## Rogge (11. Okt 2007)

Ich darf nochmal darauf hinweisen, dass wir hier im Anfänger-Forum sind. Und wenn ich mit den Tipps der Profis nichts anfangen kann, ist es doch mein Recht nochmals nachzufragen. Zudem ist meine Frage schon beantwortet worden.

P.S. Wozu mich 3 Mal darauf hinweisen mir gefälligst selbst die Antwort zu suchen, wenn ich mit dem allgemeinen Kram den ich finde nichts anfangen kann?


----------



## Gast (11. Okt 2007)

Hallo,

Kleiner Frage hast du wirklich eine Liste oder eine Menge:

Bei Menge:


```
SortedSet<XY> sortedSet = new TreeSet( new Comparator<XY>() {

      public int compare( XY o1, XY o2 )
      {
        return 0; // Hier die Soriterkriteriren des Objects impl. kannst z.B. compareTo der ADTs benutzen.
      }
});
```

fertig. Hat mich ungefaehr 5 Minuten gekostet ....


----------



## byte (11. Okt 2007)

Rogge hat gesagt.:
			
		

> Ich darf nochmal darauf hinweisen, dass wir hier im Anfänger-Forum sind. Und wenn ich mit den Tipps der Profis nichts anfangen kann, ist es doch mein Recht nochmals nachzufragen. Zudem ist meine Frage schon beantwortet worden.
> 
> P.S. Wozu mich 3 Mal darauf hinweisen mir gefälligst selbst die Antwort zu suchen, wenn ich mit dem allgemeinen Kram den ich finde nichts anfangen kann?



Nächstes Mal nicht gleich so patzig auf gut gemeinte Ratschläge reagieren. Sonst brauchst Du Dich nicht wundern, wenn Dir irgendwann gar keiner mehr hilft. Gilt für dieses Forum und eigtl. auch jede andere Situation des täglichen Lebens.


----------



## Rogge (11. Okt 2007)

Gast hat gesagt.:
			
		

> Hallo,
> 
> Kleiner Frage hast du wirklich eine Liste oder eine Menge:
> 
> ...




Hallo,

wie ich eingangs gepostet habe, es ist eine Liste, gefüllt mit einem selbst erstellten Datentyp. Und darum finde ich das nicht ganz so einfach sowas zu sortieren wie einfache Strings o.ä. wie es oft in Büchern vorgeführt wird.

Trotzdem danke für deine Antwort.


----------



## SlaterB (11. Okt 2007)

du könntest deinen guten Willen zeigen, indem du wenigstens von alleine lernst, eine Liste von Strings zu sortieren
(was ja so einfach ist),

also ein Miniprogramm schreiben mit einer Liste mit 5 Strings, sortieren und ausgeben


----------



## Rogge (11. Okt 2007)

byto hat gesagt.:
			
		

> Nächstes Mal nicht gleich so patzig auf gut gemeinte Ratschläge reagieren. Sonst brauchst Du Dich nicht wundern, wenn Dir irgendwann gar keiner mehr hilft. Gilt für dieses Forum und eigtl. auch jede andere Situation des täglichen Lebens.



Gut gemeinte Ratschläge? Welche denn?

Ich glaube schon, dass ich immer höflich geblieben bin... bis zu dem Punkt, wo man von oben auf mich herab geblickt hat und meinte ich würde gar nichts können. Hallo? Wenn du den Thread aufmerksam verfolgt hättest, wäre dir das nicht entgangen.


----------



## ..... (11. Okt 2007)

Rogge hat gesagt.:
			
		

> Gast hat gesagt.:
> 
> 
> 
> ...



Noch nich kapiert?? XY ist doch nix anderes als dein "selbst erstellter Datentyp"... :autsch:


----------



## Rogge (11. Okt 2007)

SlaterB hat gesagt.:
			
		

> du könntest deinen guten Willen zeigen, indem du wenigstens von alleine lernst, eine Liste von Strings zu sortieren
> (was ja so einfach ist),
> 
> also ein Miniprogramm schreiben mit einer Liste mit 5 Strings, sortieren und ausgeben



 Siehe hier...

Fertig!


----------



## byte (11. Okt 2007)

Rogge hat gesagt.:
			
		

> wie ich eingangs gepostet habe, es ist eine Liste, gefüllt mit einem selbst erstellten Datentyp. Und darum finde ich das nicht ganz so einfach sowas zu sortieren wie einfache Strings o.ä. wie es oft in Büchern vorgeführt wird.



11.4.4 Sortieren

Mit zwei sort()-Methoden bietet die Utility-Klasse Collections die Möglichkeit, die Elemente einer Liste stabil zu sortieren.

class java.util.Collections

    * static <T extends Comparable<? super T>> void sort( List<T> list ) Sortiert die Elemente der Liste gemäß ihrer natürlichen Ordnung, die ihnen die Implementierung über Comparable gibt.

    * static <T> void sort( List<T> list, Comparator<? super T> c ) *Sortiert die Elemente der Liste gemäß der Ordnung, die durch den Comparator c festgelegt wird. Einen mögliche natürliche Ordnung spielt keine Rolle.*


http://www.galileocomputing.de/openbook/javainsel6/javainsel_11_004.htm#Xxx999889


----------



## SlaterB (11. Okt 2007)

@Rogge:
nun, sogesehen kannst du dann ja auch nicht mehr als ein fertiges Beispiel von dort verlangen:

Listing 11.7    com/javatutor/insel/util/ClubComparatorDemo.java


----------



## Rogge (11. Okt 2007)

..... hat gesagt.:
			
		

> Rogge hat gesagt.:
> 
> 
> 
> ...



Also schreibe ich...

List<Datensatz> sortierteListe = new TreeSet(new Comparator<Datansatz>()) { ...

Das folgende sieht dann wieder so aus, als ob ich selbst die einzelnen Elemente vergleichen müsste. Ich dachte, Java würde soetwas anbieten.

Ich bin also auf der Suche nach soetwas hier... (folgender Code ist natürlich totaler Blödsinn, sollte aber illustrieren, was ich möchte)

Liste<Datensatz> sortierteListe = new LinkedList<Datensatz>(daten.sortBy(daten.Econ));

Obwohl es sicher auch möglich ist, die Liste direkt zu sortieren, ohne eine neue erstellen zu müssen. nicht umsonst ist es ja eine LinkedList.


----------



## byte (11. Okt 2007)

Eine Liste ist per se unsortiert. Du kannst sie mittels Collections.sort() sortieren, aber sobald Du wieder ein Objekt einfügst, ist die Sortierung wieder dahin. Wenn Du eine Collection brauchst, die ständig sortiert ist, dann verwende ein TreeSet.

Nötig zum Sortieren: Entweder müssen die Elemente der Collection Comparable implementieren oder Du nutzt einen Comparator. Details dazu findest Du in der API Doc, in jedem Grundlagenbuch, über die Forensuche, bei Google, ...


----------



## Rogge (11. Okt 2007)

Danke, ich versuche es.


----------



## Rogge (11. Okt 2007)

Ok, da ich nach int-Werten sortieren möchte, muss ich keinen Comparator einfügen, den Integer implementiert bereits Comparable. Richtig?

Wenn ich dann meine Liste sortieren möchte, warum muss ich Collections.sort() schreiben? Warum geht nicht daten.sort()? Ich komme damit echt nicht weiter. Hab mir jetzt ne Stunde die API angesehen und die tollen Beispiele bei galileo computing. Und ich bin noch kein Stück weiter.


----------



## byte (11. Okt 2007)

Rogge hat gesagt.:
			
		

> Warum geht nicht daten.sort()? Ich komme damit echt nicht weiter. Hab mir jetzt ne Stunde die API angesehen und die tollen Beispiele bei galileo computing. Und ich bin noch kein Stück weiter.



Weil es keine Methode sort() in List gibt. Mach halt einfach (vorher einen geeigneten Comparator definieren, der gemäß des gewünschten Feldes vergleicht):


```
Collections.sort(daten, comparator);
```


----------



## Rogge (11. Okt 2007)

Nun habe ich an meine Klasse "implements Comparator<Datensatz>" schreiben müssen. Das führte zu einem Error, die Klasse war nicht abstract und sonst noch was. Hab dann auch "abstract" der Klasse hinzugefühgt.

Ist dann das hier mein Comparator?


```
public int compareEcon(Datensatz d1, Datensatz d2){
    return d1.getEcon()-d2.getEcon();
  }
```


----------



## byte (11. Okt 2007)

Bei Dir scheints ja noch an einigen Stellen zu hapern. Lies mal nach, wie man Interfaces implementiert und was abstract bedeutet.


----------



## Rogge (11. Okt 2007)

Wie bereits gesagt, sowas hat der Prof. mit uns nie gemacht... und ich hab's bis jetzt noch nie gebraucht und nie darüber gelesen. Nagut... *Javainsel durchstöber*


----------



## Rogge (11. Okt 2007)

So, weiß jetzt was "abstract" bedeutet... *wieder von meinem Konstruktor entfern 

Ich habe jetzt das Interface Comparable implementiert und die Methode compareTo definiert...


```
public int compareTo(Datensatz d1){
    return 0;
  }
```

Und wie geht es jetzt weiter?


----------



## SlaterB (11. Okt 2007)

jetzt gibts du +1, 0 oder -1 zurück,
du hast dein eigenes Objekt und das andere und musst nun entscheiden, welches kleiner ist


----------



## Rogge (11. Okt 2007)

Aber ich hab doch nur d1...

Die Funktion ist nun ca so? 


```
Datensatz X, Y;
if (X.compareTo(Y)) == 0 {
System.out.println("gleich");
}
```

Aber wo findet der Vergleich statt? Also, wann weiß ich, dass ich 0 oder 1 oder -1 zurückgeben muss? Geht das so?:


```
public int compareTo(Datensatz d1){
if (this.getEcon()<d1.getEcon()) {
return -1; }
usw.
```


----------



## SlaterB (11. Okt 2007)

so gehts

> Aber wo findet der Vergleich statt?

die Operation compareTo() wird in Collections.sort() vom Sortieralgorithmus aufgerufen


----------



## Rogge (11. Okt 2007)

Cool, danke, dann werd ich das in wenigen Minuten mal komplett ausprobieren...

Da kommt dann aber noch ein anderes Problemchen auf. Ich habe die Methode nun ja mit Econ als Vergleichsindikator angegeben. Ich möchte aber auch auf andere Werte vergleichen. Die Methode kann ich aber nur einmal implementieren. Wie kann ich das erreichen, dass ich auch auf andere Werte vergleichen kann als nur auf Econ?


----------



## maki (11. Okt 2007)

Dann musst du Klassen schreiben, die Comparator implementieren, das können auch innere Klassen sein.


----------



## Rogge (11. Okt 2007)

Ok, danke. Mache ich!

Nächstes Problem, die implementierung sieht jetzt so aus:


```
public int compareTo(Datensatz d1){
    if (this.getEcon()<d1.getEcon()) {
      return -1;
    } else
    if (this.getEcon()==d1.getEcon()) {
      return 0;
    } else return 1;
  }
```

Der Aufruf ist wie folgt richtig?

```
Collections.sort(daten);
```

Dafür bekomme ich Fehler:
cannot find symbol
method getEcon()
method sort(...


----------



## SlaterB (11. Okt 2007)

```
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Datensatz
    extends Player
    implements Comparable<Datensatz>
{
    private int Id, Econ, Fleet, Tech, Exp, Acc; 
    private double Lvl; 

    public void setEcon(int x)      { Econ=x;        } 
    public void setFleet(int x)     { Fleet=x;       } 
    public void setTech(int x)      { Tech=x;        } 
    public void setExp(int x)       { Exp=x;         } 
    public void setAcc(int x)       { Acc=x;         } 
    public void setLvl(double l)    { Lvl=l;         } 

    public int getEcon()            { return Econ;   } 
    public int getFleet()           { return Fleet;  } 
    public int getTech()            { return Tech;   } 
    public int getExp()             { return Exp;    } 
    public int getAcc()             { return Acc;    } 
    public double getLvl()          { return Lvl;    } 

    public int compareTo(Datensatz d1)
    {
        if (this.getEcon() < d1.getEcon())
        {
            return -1;
        }
        else if (this.getEcon() == d1.getEcon())
        {
            return 0;
        }
        else
            return 1;
    }

    public String toString()
    {
        return "DatenSatz " + getEcon();
    }


    public static void main(String[] args)
    {
        List<Datensatz> list = new ArrayList<Datensatz>();

        Datensatz a = new Datensatz();
        a.setEcon(4);
        list.add(a);
        Datensatz b = new Datensatz();
        b.setEcon(3);
        list.add(b);
        Datensatz c = new Datensatz();
        c.setEcon(9);
        list.add(c);

        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);
    }
}


class Player
{
}
```


----------



## Rogge (11. Okt 2007)

Oh, eine Musterlösung  Danke schön. Ich hab bei mir das Interface an der völlig falschen Stelle implementiert, dann kann das auch gar nicht gehen. Oh man, ich hab echt noch viel zu lernen. *seuftz

Vielen Dank SlaterB, du hast diesem Elend ein Ende gemacht. Ich kann aber nicht garantieren, nun keine blöden Fragen mehr zu stellen. *grins


----------



## Rogge (11. Okt 2007)

Funktioniert!


----------



## Rogge (11. Okt 2007)

maki hat gesagt.:
			
		

> Dann musst du Klassen schreiben, die Comparator implementieren, das können auch innere Klassen sein.



Das hört sich einfacher an als es für mich ist.. und, du meintest, dass die Klassen Cmparable (nicht Comparator) implementieren müssen, oder?!

Ich habe etwas probiert, zwei neue Klassen geschrieben, die Datensatz erweitern. Diese Klassen definieren lediglich die Methode compareTo().  


```
public class Econ extends Datensatz implements Comparable<Datensatz>{

   public int compareTo(Datensatz d){
    if (this.getEcon()<d.getEcon()) {
      return -1;
    } else
    if (this.getEcon()==d.getEcon()) {
      return 0;
    } else return 1;
  }
}


public class Fleet extends Datensatz implements Comparable<Datensatz>{

   public int compareTo(Datensatz d){
    if (this.getFleet()<d.getFleet()) {
      return -1;
    } else
    if (this.getFleet()==d.getFleet()) {
      return 0;
    } else return 1;
  }
}
```

Wenn ich dann eine Liste vom Typ Datensatz habe, und diese mit Datensätzen gefüllt ist... wie ist es mir dann jetzt möglich, diese Liste zu sortieren? Ich müsste doch die Liste vom Typ Econ oder Fleet erstellen, bevor ich sie sortieren kann, denn "Datenssatz" selbst implementiert nun nicht mehr das Interface. Ich könnte also die entsprechende Liste erstellen und alle Datensätze aus der Liste daten in die Listen econ und fleet kopieren. Dann kann ich sie sortieren. Das erscheint mir aber etwas umständlich. Da gibt es sicher einen anderen Weg, oder habe ich da schon wieder was falsch gemacht, maki?


----------



## Rogge (11. Okt 2007)

```
List<Datensatz> daten = new LinkedList<Datensatz>();
    List<Econ> econ = new LinkedList<Econ>();

    Datensatz d = new Datensatz();
    Econ e = new Econ();

    e=(Econ) d;

    econ=daten;
```

Das zeigt nochmal, was ich genau meine. econ= daten führt zu einem Fehler. Wie bereits gesagt ist es kein Problem, die Listen zu kopieren, sollte aber auch anders gehen, oder?


----------



## SlaterB (11. Okt 2007)

ne nun brauchst du Comparatoren,
siehe das Clubhaus-Beispiel in der Javainsel

Listing 11.7    com/javatutor/insel/util/ClubComparatorDemo.java


----------



## Rogge (11. Okt 2007)

Ich hab's...


```
class Econ implements Comparator<Datensatz>{
  public int compare(Datensatz d1, Datensatz d2){
    return d1.getEcon()-d2.getEcon();
  }
}
```

Aufruf erfolgt durch,


```
Collections.sort(daten,new Econ());
```

Und ich hab's ganz alleine abgeschrieben.  *stolz auf mich bin* *lach*


----------



## Rogge (11. Okt 2007)

boah... ganze 4 Zeilen Code und dafür hab ich mich hier sogar gezofft und den halben Tag gebraucht. *ganz laut lache*


----------

