Wie man eine HashMap mit der natürlichen entrySet () Reihenfolge iteriert?

7

Meine Karte enthält Schlüssel in alphabetischer Reihenfolge. Wenn ich es zeige, verwende ich entrySet (). Iterator (), aber meine Ergebnisse sind nicht in der alphabetischen Reihenfolge. Wie kann ich meine Ergebnisse in Ordnung bringen?

    
Venkat Papana 11.08.2011, 16:03
quelle

5 Antworten

12

Verwenden Sie TreeMap :

  

Eine Rot-Schwarz-basierte NavigableMap Implementierung. Die Karte wird nach der natürlichen Reihenfolge ihrer Schlüssel sortiert, oder durch eine Comparator zur Verfügung gestellt zur Kartenerstellung, abhängig davon Konstruktor wird verwendet ...

    
kan 11.08.2011, 16:05
quelle
14

Nein, Ihre Karte enthält keine Elemente in alphabetischer Reihenfolge. Sie können .put(..) dann in dieser Reihenfolge haben, aber die Map hat keine definierte Iterationsreihenfolge.

Andere empfehlen die Verwendung von SortedSet , aber Sie können auch LinkedHashMap verwenden. . Es garantiert Iterationsreihenfolge:

  

Diese Implementierung (LinkedHashMap) erspart ihren Clients die nicht spezifizierte, im Allgemeinen chaotische Reihenfolge, die von HashMap (und Hashtable) bereitgestellt wird, ohne dass die mit TreeMap verbundenen erhöhten Kosten anfallen.

    
Bozho 11.08.2011 16:20
quelle
1
  

Meine Karte enthält Schlüssel in alphabetischer Reihenfolge sortiert

Das ist nicht wahr.

Verwenden Sie Ссылка oder sortieren Sie Ihre Schlüssel, bevor Sie iterieren

    
lucapette 11.08.2011 16:06
quelle
1

Da HashMap Hashing verwendet, um die Einträge in einem zugrunde liegenden Container zu speichern, wird keine bestimmte Reihenfolge garantiert. Wenn Sie Ihre Einträge von Ihrem HashMap bestellen möchten, müssen Sie sie selbst sortieren.

A TreeMap dagegen behält eine gewisse Reihenfolge bei (Sie können dies selbst bestimmen, indem Sie die Comparable -Schnittstelle implementieren). Wenn Sie also einen Eintrag erhalten, wird er alphabetisch zu Ihnen kommen. String implementiert bereits Comparable , sodass sie in alphabetischer Reihenfolge an Sie zurückgegeben werden.

    
Chad La Guardia 11.08.2011 16:07
quelle
1

Sie können ConcurrentSkipListMap oder TreeMap .

    
JVerstry 11.08.2011 16:07
quelle

Tags und Links