Liste sortieren

Status
Nicht offen für weitere Antworten.

Rogge

Aktives Mitglied
Hallo,

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

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

Ein Datensatz sieht so aus...

Code:
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
 
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.
 
> 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 😉
 
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?!
 
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. 🙂
 
Einen Sortieralgorythmus selbst zu implementieren ist wirklich nicht Zeitgemäß in Java 😉
 
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.
 
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. 😉
 
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.
 
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.
 
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?
 
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
 
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? 😉
 
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.
 
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
 
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.
 
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. 😉
 
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.
 
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.
 
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 😉
 
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?
 
Hallo,

Kleiner Frage hast du wirklich eine Liste oder eine Menge:

Bei Menge:

Code:
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 ....
 
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.
 
Gast hat gesagt.:
Hallo,

Kleiner Frage hast du wirklich eine Liste oder eine Menge:

Bei Menge:

Code:
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 ....


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.
 
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
 
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.
 
Rogge hat gesagt.:
Gast hat gesagt.:
Hallo,

Kleiner Frage hast du wirklich eine Liste oder eine Menge:

Bei Menge:

Code:
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 ....


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.

Noch nich kapiert?? XY ist doch nix anderes als dein "selbst erstellter Datentyp"... :autsch:
 
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
 
@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
 
..... hat gesagt.:
Rogge hat gesagt.:
Gast hat gesagt.:
Hallo,

Kleiner Frage hast du wirklich eine Liste oder eine Menge:

Bei Menge:

Code:
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 ....


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.

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

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.
 
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, ...
 
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.
 
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):

Code:
Collections.sort(daten, comparator);
 
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?

Code:
  public int compareEcon(Datensatz d1, Datensatz d2){
    return d1.getEcon()-d2.getEcon();
  }
 
Bei Dir scheints ja noch an einigen Stellen zu hapern. Lies mal nach, wie man Interfaces implementiert und was abstract bedeutet.
 
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* 🙁
 
So, weiß jetzt was "abstract" bedeutet... *wieder von meinem Konstruktor entfern 😉

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

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

Und wie geht es jetzt weiter?
 
jetzt gibts du +1, 0 oder -1 zurück,
du hast dein eigenes Objekt und das andere und musst nun entscheiden, welches kleiner ist
 
Aber ich hab doch nur d1...

Die Funktion ist nun ca so?

Code:
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?:

Code:
public int compareTo(Datensatz d1){
if (this.getEcon()<d1.getEcon()) {
return -1; }
usw.
 
so gehts

> Aber wo findet der Vergleich statt?

die Operation compareTo() wird in Collections.sort() vom Sortieralgorithmus aufgerufen
 
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?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben