TreeMap lässt sich nicht sortieren

Status
Nicht offen für weitere Antworten.

tuomo

Aktives Mitglied
Hallo Leute,

ich bin am verzweifeln. Ich versuche nun schon seit einiger Zeit, eine TreeMap mit einem selbst definierten Comparator zu basteln. Aber ich bekomme immer nur ein StackOverflowError. Kann mir jemand sagen was ich in meinem (vereinfacht und verkürzten) Code falsch mache:
Code:
import java.util.Comparator;
import java.util.TreeMap;

class Person implements Comparable<String> {
	
	public String mName = null;
	public int mAlter = 0;
	
	public Person (String pName, int pAlter) {
		
		mName = pName;
		mAlter = pAlter;
	}
	
	public int compareTo(String pObj) {
		
		return mName.compareTo(pObj);
	}
	
}

class Teilnehmer implements Comparator<String> {
	
	TreeMap<String, Person> mTeilnehmer = null;
	
	public Teilnehmer () {
		
		mTeilnehmer = new TreeMap<String, Person> (this);
	}
	
	public void put (String pName, Person pPerson) {
		
		mTeilnehmer.put(pName, pPerson);
	}
	
	public void output () {
		
		for (Person lPerson : mTeilnehmer.values())
			System.out.println(lPerson.mName);
	}
	
	public int compare(String pObj1, String pObj2) {
		
		String lName1 = mTeilnehmer.get(pObj1).mName;
		String lName2 = mTeilnehmer.get(pObj2).mName;
		
		return lName1.compareTo(lName2);
	}
	
}

public class TreeMapSorting {
	
	public static void main (String[] args) {
		
		Teilnehmer lTeilnehmer = new Teilnehmer();
		
		lTeilnehmer.put("5", new Person("Harald", 12));
		lTeilnehmer.put("4", new Person("Sina", 14));
		lTeilnehmer.put("3", new Person("Alex", 10));
		lTeilnehmer.put("2", new Person("Peter", 7));
		lTeilnehmer.put("1", new Person("Caro", 7));
		
		lTeilnehmer.output();
	}
}

Ich seh's einfach nicht mehr.. :(
 

tuomo

Aktives Mitglied
Danke, euch beiden. Das Ding hab ich auch schon gefunden. Aber ich versteh das einfach nicht. Ich glaube, mir ist im allgemeinen nicht so ganz klar, wie das überhaupt funktionieren soll.

Ich hab das so verstanden:
Wenn ich mir eine TreeMap erzeuge, dann ist die 'natürlich' nach den Key geordnet. Hab ich ausprobiert, klappt wunderbar. Nun will ich aber nicht nach dem Key sondern nach einen Attribut des Objektes, welche in der TreeMap als Value gespeichert ist, sortieren. Also habe in der Klasse Person das Interface Comparable implementiert und dort festgelegt, das die Objekt nach dem Name unterschieden werden sollen. Und dann habe ich die compare()-Methode überschrieben, um nicht den Key sondern das Value zu sortieren.

Wo liegt mein Denkfehler?
 
S

SlaterB

Gast
der Fehler ist, dass die Comparable-Funktion bereits beim Einfügen gebraucht wird,
bevor überhaupt richtig eingefügt ist, setzt du schon voraus, das richtig eingefügt ist, denn du brauchst ja die Position im Comparator

die Endlosschleife kommt ein bisschen aus einem anderen Grund,
nämlich daher, dass beim Abfragen des Wertes in der Map selber wieder Vergleiche durchgeführt werden müssen

wie in dem anderen Thread geschrieben: ein Key sollte seinen Value einfach kennen, als Referenz, ganz ohne Map, fertig
 
M

maki

Gast
Frage nebenbei: Wie speicherst du deine Objekte?

Ich hoffe nicht mit Hibernate, denn sonst klannst du den Plan mit der TreeMap gleich wieder vergessen.
 

Marco13

Top Contributor
Ja, das Problem ist eben, dass der Comparator davon ausgeht, dass die Elemente, die verglichen werden sollen, schon in der Map liegen. Allerdings muss man sie erst vergleichen, um sie (an der richtigen Stelle) in die Map legen zu können.

Abgesehen davon macht
class Person implements Comparable<String>
keinen Sinn - man kann nicht eine Person mit einem String vergleichen. Das Interface Comparable implementiert man (... eigentlich immer?!) mit einem Typparameter, der den Typ der Implementierenden Klasse angibt - in diesem Fall also
class Person implements Comparable<Person>
um anzudeuten, dass man Personen miteinander vergleichen kann - und zwar nach ihrem Vornamen. (Falls du später mal andere Vergleichskriterien haben willst, wie z.B. das Alter, solltest du dir aber jeweils Comparatoren dafür schreiben)

Falls du die ValueSortedMap verwenden willst, kannst du das so
Code:
import java.util.*;

class Person implements Comparable<Person> {

   public String mName = null;
   public int mAlter = 0;

   public Person (String pName, int pAlter) {

      mName = pName;
      mAlter = pAlter;
   }

   public int compareTo(Person pObj)
   {
      return mName.compareTo(pObj.mName);
   }

   public String toString()
   {
       return mName+" ("+mAlter+")";
   }

}

public class TreeMapSorting {

   public static void main (String[] args)
   {
      ValueSortedMap<String, Person> lTeilnehmer = new ValueSortedMap<String, Person>();

      lTeilnehmer.put("5", new Person("Harald", 12));
      lTeilnehmer.put("4", new Person("Sina", 14));
      lTeilnehmer.put("3", new Person("Alex", 10));
      lTeilnehmer.put("2", new Person("Peter", 7));
      lTeilnehmer.put("1", new Person("Caro", 7));

      for (String s : lTeilnehmer.keySet())
      {
          System.out.println(s+" : "+lTeilnehmer.get(s));
      }
   }
}

Ausgabe:
Code:
3 : Alex (10)
1 : Caro (7)
5 : Harald (12)
2 : Peter (7)
4 : Sina (14)
 

tuomo

Aktives Mitglied
maki hat gesagt.:
Frage nebenbei: Wie speicherst du deine Objekte?

Ich hoffe nicht mit Hibernate, denn sonst klannst du den Plan mit der TreeMap gleich wieder vergessen.
Nein, die Daten werden in einem XML gespeichert. Hat aber mit dem garnichts zu tun. Das mit dem Sortieren ist allein zu Darstellungszwecken.
 

tuomo

Aktives Mitglied
Erstmal Danke für eure Hilfe. Ich hab zwar eine ungefähre Vorstellung von dem was ich falsch gemacht habe, aber das muss sich erstmal setzen. Ich werd mir jetzt mal in Ruhe den Quellcode von Marco13 anschaun. Ich meld mich dann ..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Map (TreeMap in TreeMap) Java Basics - Anfänger-Themen 1
N TreeMap alphabetisch sortieren? Java Basics - Anfänger-Themen 3
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
C TreeMap Abfragen Problem Java Basics - Anfänger-Themen 7
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
I TreeMap Java Basics - Anfänger-Themen 4
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
M TreeMap Java Basics - Anfänger-Themen 4
H TreeMap<> statt TreeMap<Long, String> Java Basics - Anfänger-Themen 2
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
W Treemap remove Java Basics - Anfänger-Themen 5
N Frage zu TreeMap Java Basics - Anfänger-Themen 3
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
H Datentypen TreeMap<Double, Object> - negative Werte? Java Basics - Anfänger-Themen 4
H TreeMap.remove(value) - und nicht mit key! Geht das? Java Basics - Anfänger-Themen 18
H TreeMap Rückgabe - Compiler-Warnings Java Basics - Anfänger-Themen 9
S Studentenverwaltung mit TreeMap Java Basics - Anfänger-Themen 8
F Treemap und Sortierung? Java Basics - Anfänger-Themen 2
G TreeMap Java Basics - Anfänger-Themen 6
P wie clont sich eine TreeMap? Java Basics - Anfänger-Themen 8
G TreeMap Probleme. Java Basics - Anfänger-Themen 10
G TreeMap vom 1. bis letzte eintrag durchgehen Java Basics - Anfänger-Themen 17
F TreeMap speichern und lesen Java Basics - Anfänger-Themen 3
Q TreeMap immer sortiert halten Java Basics - Anfänger-Themen 9
H Treemap mit zusammengesetzten Key erstellen Java Basics - Anfänger-Themen 13
G TreeMap sortieren über ArrayList als Value Java Basics - Anfänger-Themen 9
O TreeMap nach Object[] casten? Java Basics - Anfänger-Themen 3
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
Franzi1001 ScrollBar lässt sich nicht bewegen Java Basics - Anfänger-Themen 4
C Classpath Compiler lässt sich nur bedingt von Kommandozeile aus starten Java Basics - Anfänger-Themen 17
CptK Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
L Programm lässt sich nicht starten! Java Basics - Anfänger-Themen 1
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
x-tshainge Mein Programm lässt sich nicht Starten Java Basics - Anfänger-Themen 8
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
E App lässt sich nicht starten Java Basics - Anfänger-Themen 8
E Pdf-Document lässt sich im Servlet nicht öffnen Java Basics - Anfänger-Themen 5
S Erste Schritte Java Applet lässt sich im Browser nicht öffnen Java Basics - Anfänger-Themen 9
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
J Java Datei lässt sich nicht kompilieren Java Basics - Anfänger-Themen 3
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
M Array mit Objekten lässt sich nicht auslesen Java Basics - Anfänger-Themen 10
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
P Programm lässt sich nicht starten - Klasse mit Hauptmethode nicht gefunden Java Basics - Anfänger-Themen 9
B Compiler-Fehler [Lejos] [RCX] Programm lässt sich nicht kompilieren Java Basics - Anfänger-Themen 5
N Von Kopf bis Fuss TestArrays lässt sich nicht lösen Java Basics - Anfänger-Themen 5
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
G Java lässt sich nicht installieren Java Basics - Anfänger-Themen 1
L0MiN Datei lässt sich nicht ausführen Java Basics - Anfänger-Themen 3
A charAt(x)-Abfrage lässt bei Strings<x das Pgrogramm abstürzen. Kann man das verhindern? Java Basics - Anfänger-Themen 4
A Java-Zeilenprogramm lässt sich nicht exportieren Java Basics - Anfänger-Themen 13
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
A Lässt sich dieser Ausdruck irgendwie einfacher schreiben? Java Basics - Anfänger-Themen 4
E jar lässt sich nicht ausführen Java Basics - Anfänger-Themen 16
V Compiler-Fehler Programm lässt sich nicht kompilieren Java Basics - Anfänger-Themen 22
S jar Datei lässt sich nur über CMD starten Java Basics - Anfänger-Themen 15
M Java Class File lässt sich nicht ausführen Java Basics - Anfänger-Themen 3
H Java Archiv lässt sich nur pfadgebunden öffnen? Java Basics - Anfänger-Themen 26
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
B Methoden Methode lässt sich nicht selbst aufrufen? Java Basics - Anfänger-Themen 3
M Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 17
M Variablen Variable lässt sich durch ActionListener nicht ändern Java Basics - Anfänger-Themen 5
Y .class Ausführung nicht möglich - Path lässt sich nicht ändern Java Basics - Anfänger-Themen 8
F Textfenster lässt sich nicht schließen Java Basics - Anfänger-Themen 3
J Classpath Programm lässt sich nicht ausführen Java Basics - Anfänger-Themen 5
H programm lässt sich nicht compilieren Java Basics - Anfänger-Themen 7
W [Java Archive (JAR) Datei erstellen] Lässt sich nicht ausfürhren Java Basics - Anfänger-Themen 7
M selbst gezipptes File lässt sich nicht öffnen Java Basics - Anfänger-Themen 2
U String lässt sich nicht in txt datei schreiben! Java Basics - Anfänger-Themen 7
R jLabel lässt sich nicht public setzen?? Java Basics - Anfänger-Themen 15
L Programm lässt sich nicht starten Java Basics - Anfänger-Themen 9
hdi File lässt sich nicht erstellen Java Basics - Anfänger-Themen 3
S (Anfänger) problem Programm lässt sich nicht öffnen! Java Basics - Anfänger-Themen 6
S Aufgabe gelöst, lässt sich aber nicht kompilieren Java Basics - Anfänger-Themen 3
S ArrayList länge lässt sich nicht voreinstellen Java Basics - Anfänger-Themen 10
Developer_X Wie lässt man ein Applet, in einem JFrame erscheinen? Java Basics - Anfänger-Themen 16
N Startklasse lässt sich nicht ausführen Java Basics - Anfänger-Themen 17
D Sehr großer String lässt sich nicht bearbeiten Java Basics - Anfänger-Themen 7
F jTextField lässt sich aus einer Unterklasse nicht ansprechen Java Basics - Anfänger-Themen 2
A Scrollen im Browser lässt Applet neu starten? Java Basics - Anfänger-Themen 14
G Generics - Map.putAll lässt sich nicht richtig implementiern Java Basics - Anfänger-Themen 6
U jarfile lässt sich nicht ausführen Java Basics - Anfänger-Themen 5
N jar lässt sich nicht öffnen Java Basics - Anfänger-Themen 7
G Fenster lässt sich nicht schließen. Java Basics - Anfänger-Themen 4
G Datei lässt sich nicht ändern Java Basics - Anfänger-Themen 12
S Hintergrundfarbe lässt sich nicht ändern Java Basics - Anfänger-Themen 3
M Textare lässt sich nicht ansprechen Java Basics - Anfänger-Themen 9
G button grösse lässt sich nicht verstellen Java Basics - Anfänger-Themen 9
G Programm lässt sich nicht aus der Konsole starten Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben