2015-12-22 8 views
8

Ich verwendete eine TreeMap, wo der Schlüssel ist String und der Wert ist vom Typ Integer. Wenn ich das Objekt Map ausgabe, wird nicht in sortierter Reihenfolge gedruckt.Warum sortiert meine TreeMap nicht?

Hier ist der Code, den ich verwendet:

TreeMap<String, Integer> m = new TreeMap<String, Integer>(); 
m.put("Hello", 1); 
m.put("world", 2); 
m.put("Zertt", 5); 
m.put("Hello", 1); 
m.put("world", 2); 
System.out.println("map : " + m); 

Ich erwarte, dass die Ausgabe wie folgt sortiert werden:

Karte: {Hallo = 1, Welt = 2, Zertt = 5}

Aber anstatt diese erhalte ich:

Karte: {Hallo = 1, Zertt = 5, world = 2}

+0

Es ist Sortieren :) – RobAu

Antwort

16

Die natürliche Ordnung der String s Fall empfindlich ist, so kommt Z vor w (alle Großbuchstaben kommen vor allem Kleinbuchstaben).

Verwenden

TreeMap<String, Integer> m = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER); 

für Groß- und Kleinschreibung um.

0

Die Sortierung in Treemap basiert auf der natürlichen Reihenfolge der Schlüssel und nicht der Werte.

2

Javadoc sagt:

Die Karte nach der natürlichen Ordnung der Schlüssel sortiert wird oder durch einen Komparator auf Kartenerstellungszeit vorgesehen ist, je nachdem, welche Konstruktor verwendet wird.

EDIT: Erans Antwort ist richtig, String-Reihenfolge ist case-sensitive standardmäßig.

1

Wie vor der Zeichenfolge natürlich Reihenfolge Groß- und Kleinschreibung beachtet. Aber, wenn Sie insentive Bestellung möchten, können Sie Komparator als TreeMap Konstruktorparameter bieten:

Map<String, Integer> m = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER); 

P. S. Beachten Sie, wenn Fall insentive um Tasten vergleichen die insentive auch:

m.put("Hello", 1); 
m.put("helLo", 6); 

Ergebnis ist 6 und Schlüssel ist Hello

1

Vielleicht wird diese Informationen hilfreich sein.

In der Klasse TreeMap enthält Konstrukteure:

  1. TreeMap()

  2. TreeMap (Vergleicher comp)

  3. TreeMap (Karte m)

  4. TreeMap (SortedMap sm)

Der erste Konstruktor erstellt eine Sammlung, in der alle Elemente in der natürlichen Reihenfolge ihrer Schlüssel sortiert sind.

Der zweite Konstruktor erzeugt eine leere Ansammlung, die Elemente des , die nach dem Gesetz sortiert werden, die in der Übertragungs Komparator definiert ist.

Der dritte Konstruktor erstellt eine TreeMap basierend auf einer vorhandenen Map.

Der vierte Konstruktor erstellt eine TreeMap basierend auf vorhandenen SortedMap, Elemente davon werden nach dem Gesetz sortiert SortedMap gesendet werden.

Beachten Sie, dass die Schlüssel für die Sortierung verwendet werden, anstatt den Wert.