Hallo, ich möchte die Enumeration von Keys einer Hashtable alphabetisch ausgesortiert bekommen.
Die keys sind String. Soll ich sie selbst sortieren oder gibt es schon eine Methode, die die keys sortiert?
Hab das gleiche Problem und kann mit den Antworten leider noch nicht so viel anfangen.
Wie kann ich Treemap oder LinkedList oder Hashtablewerte sortieren?
Hmmm,... bisher habe ich die angelegenheit so vor mir...
Code:
public void sortFreq(Hashtable freq){
Vector v = new Vector(freq.keySet());
Collections.sort(v);
Iterator it = v.iterator();
while (it.hasNext()) {
Object key = it.next();
Object value = freq.get(key);
System.out.println(key.toString()+" "+value.toString());
} // end while
}
Also gehört eigentlich der Schlüssel zu deinem zu sortierenden Element, richtig? Dann würde ich eine entsprechende Klasse bilden (mit den Feldern, die jetzt in Schlüssel und Wert stehen) und diese in eine Liste packen, welche ich mit entsprechenden Comparatoren beliebig sortieren kann (siehe java.util.Comparator).
public void sortFreq(Hashtable freq){
List list = new LinkedList();
Vector v = new Vector(freq.keySet());
Collections.sort(v);
Iterator it = v.iterator();
while (it.hasNext()) {
Object key = it.next();
Object value = freq.get(key);
Temp temp = new Temp(key.toString(), value.toString());
list.add(temp);
} // end while
Collections.sort(list);
}
Nicht ganz. Ein Comparator deklariert genau eine Methode, nämlich Comparator.compare(Object,Object), die du überschreibst. Für den Typen Integer kann das so aussehen:
Code:
public class IntegerComparator
implements Comparator
{
/**
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
public int compare (Object o1, Object o2)
{
if (o1 == null || o2 == null) {
throw new IllegalArgumentException("Einer der Parameter ist null.");
}
if ((o1 instanceof Integer) || (o2 instanceof Integer)) {
Integer i1 = (Integer) o1;
Integer i2 = (Integer) o2;
return i1.compareTo(i2);
}
throw new IllegalArgumentException("Falscher Parametertyp"
+ ". o1: " + o1.getClass().toString() + ", o2: "
+ o2.getClass().toString());
}
}
, für deine selbst definierten Typen baust du einen Vergleich der Felder ein, nach denen du sortieren möchtest.
Diesen Comparator kannst du nun jedem Set im Konstruktor mitgeben. Wenn du dir jetzt für die Felder deines Typs, nach denen du sortieren möchtest, jeweils einen solchen Comparator schreibst, bekommst du an jeder Stelle in deinem Programm einen sortierten Set mittels
Code:
Set sortiert = new TreeSet(new IntegerComparator());
sortiert.addAll(meineUnsortierteListe);
Klingt etwas kompliziert, aber geht eigentlich, wenn du nicht allzu viele verschiedene Sortierreihenfolgen brauchst.