2012-11-30 11 views
9

Wie sortiert TreeMap? sagen Sie zum Beispiel die folgenden Karte hat:TreeMap Wie sortiert es

TreeMap<String, Integer> treemap = new TreeMap<>(); 
treemap.put("lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 

Iterator ittwo = treemap.entrySet().iterator(); 
    while (ittwo.hasNext()) { 
    Map.Entry pairs = (Map.Entry)ittwo.next(); 
    System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
    ittwo.remove(); 
} 

Der Ausgang dies ist:

Jesper = 3 
Marc = 2 
lol = 1 

Also, wenn sie nicht in alphabetischer Reihenfolge, was es dann ist?

Antwort

23

Es ist nicht nur alphabetisch, aber es ist auch Groß/Kleinschreibung.

TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(); 
treemap.put("Lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 
treemap.put("lol1", 1); 
treemap.put("marc1", 2); 
treemap.put("jesper1", 3); 

Ausgang:

Jesper = 3 
Lol = 1 
Marc = 2 
jesper1 = 3 
lol1 = 1 
marc1 = 2 

Also, wenn Sie es nicht benötigen, können Sie Ihren eigenen Komparator verwenden und vergleichen String in Kleinbuchstaben:

TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(new Comparator<String>() { 
    public int compare(String o1, String o2) { 
     return o1.toLowerCase().compareTo(o2.toLowerCase()); 
    } 
}); 
treemap.put("Lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 
treemap.put("lol1", 1); 
treemap.put("marc1", 2); 
treemap.put("jesper1", 3); 

Ausgang:

Jesper = 3 
jesper1 = 3 
Lol = 1 
lol1 = 1 
Marc = 2 
marc1 = 2 
+2

'neuer Komparator () { public int compare (Zeichenfolge o1, Zeichenfolge o2) { Rückgabe o1.compareToIgnoreCase (o2); } } ' – Shawn

2

Wie Sie keinebestanden habendurch den Konstruktor, so wird dies eine neue TreeMap mit der natürlichen Reihenfolge seiner Schlüssel erstellen.

In Java bedeutet die natürliche Reihenfolge lexicographical Ordnung.

1

Sie erhalten tatsächlich die richtige Ausgabe.

J(uppercase J)>M(uppercase M)>l(lowercase l). 

Großbuchstaben sind lexcographically größer als Kleinbuchstaben

5

Als stated in the JavaDoc a TreeMap "... geordnet wird gemäß der natürlichen Ordnung der Tasten ..." (Hervorhebung ist Mine).

So kann Ihr Ergebnis richtig ist, in dem Licht, das untere Gehäuse l ist nach Groß M im UTF „Alphabet“. Wenn Sie das Standardverhalten überschreiben möchten, können Sie dem TreeMap-Konstruktor einen Comparator liefern