TreeMap immer sortiert halten

Status
Nicht offen für weitere Antworten.

quodlibet

Mitglied
Hallo zusammen,
ich muss zugeben ich kenne mich mit Collections und was so dazu gehört noch nicht richtig aus. Ich habe die Aufgabe eine Menge von Produkten zu verarbeiten. Die Produkte haben dabei das Attribut String name, nach dem sie auch sortiert werden sollen.
Wir sollen dazu eine TreeMap verwenden. Und ich habe das so gemacht:
Code:
private TreeMap<Integer, Produkte> produkte = new TreeMap<Integer, Produkte>();

Das funktioniert auch bis zu einem gewissen Punkt ganz gut. Aber wenn es um das sortieren geht nicht mehr.

Ich habe jetzt schon die compareTo-Methode fuer meine Klasse neu implementiert. Und jetzt weiß ich nicht weiter.
Ich habe schon das hier TreeMap(Comparator<? super K> c) gefunden, aber weiß nicht so wirklich was ich damit anfangen soll. Was darf ich mir denn unter einen Comparator vorstellen und wie setze ich diesen konkret um.


Bin dankbar für jede Hilfe,
quodlibet
 
hilft dir das irgendwie weiter?

Code:
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class DiameterMap {
  public static void main(String args[]) {
    String names[] = { "Mercury", "Venus", "Earth", "Mars", "Jupiter",
        "Saturn", "Uranus", "Neptune", "Pluto" };
    float diameters[] = { 4800f, 12103.6f, 12756.3f, 6794f, 142984f,
        120536f, 51118f, 49532f, 2274f };
    Map map = new TreeMap();
    for (int i = 0, n = names.length; i < n; i++) {
      map.put(names[i], new Float(diameters[i]));
    }
    Iterator it = map.keySet().iterator();
    Object obj;
    while (it.hasNext()) {
      obj = it.next();
      System.out.println(obj + ": " + map.get(obj));
    }
  }
}

gruesse
 
TreeMap sortiert anhand der compareTo Methode aus dem Interface Comparable.

Wenn du deine Elemente also richtig sortiert haben willst, dann musst du das Interface Comparable implementieren...

Code:
class SortedElement implements Comparable {
	private String name;
	
	public SortedElement(String name) {
		this.name = name;
	}
	
	public int compareTo(Object o) {
		SortedElement se = (SortedElement)o;
		return this.getName().compareTo(se.getName());
	}
	
	public String getName() {
		return this.name;
	}
}

Da die compareTo Methode eines Strings alphabetisch sortiert, deligierst du die Sortierung deiner Produkte einfach an die compareTo Methode ihrer Name-Strings.
 
Hallo yourmaninamsterdam,
dieses Implementieren hab ich gemacht. Jedoch ist ja mein Problem, dass ich nicht weiß wie ich das dann zum Sortieren umsetzen soll.

Hallo Mørketid,
etwas hilft mir das schon etwas. Aber das heißt auf jeden Fall, dass ich die TreeMap nicht TreeMap<K, V>(); einfuehren sondern TreeMap();
Und ich versteh nicht recht was dieser Iterator da macht (woher weiß, der zum Beispiel, dass er nach dem Namen sortieren soll).

mfg
quodlibet
 
yourmaninamsterdam hat gesagt.:
Wenn du deine Elemente also richtig sortiert haben willst, dann musst du das Interface Comparable implementieren...

Nicht ganz richtig. Du kannst auch separat einen Comparator schreiben und den deiner TreeMap übergeben. Vorteil: es lässt sich nachträglich nach beliebigen Feldern sortieren.
 
Das klingt sehr gut.
Wo find ich denn ein Beispiel für so einen Comparator.

Und wie muss ich dann eigentlich meine TreeMap einfuehren.

Danke schon mal bis daher.
 
SamHotte hat gesagt.:
Nicht ganz richtig. Du kannst auch separat einen Comparator schreiben und den deiner TreeMap übergeben. Vorteil: es lässt sich nachträglich nach beliebigen Feldern sortieren.
Ja, richtig, mein Fehler. "Eine der Möglichkeiten" oder sowas hätte es eher heißen müssen.

Aber nochmal zum compareTo: Die Collection sortiert dann eigentlich automatisch ein (Oder entsprechend mit dem Comparator). Dachte ich jedenfalls immer.

Die Java API sagt
This class guarantees that the map will be in ascending key order, sorted according to the natural order for the key's class ...
 
Stimmt schon, das mit der natürlichen Ordnung. Mit der Comparator-Methode kann man halt nach unterschiedlichen Sachen dort sortieren, wo man es benötigt, wie bspw. in Tabellen nach dem jeweils selektierten Spaltenkopf.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben