Sortieren der Hashmap nach Schlüsseln

79

Ich habe die folgende Hashmap in Java:

{B046 = 0,0, A061 = 3,0, A071 = 0,0, B085 = 0,0, B075 = 3,0, B076 = 9,0, B086 = 3,0, B095 = 0,0, B096 = 0,0, A052 = 0,0, B066 = 0,0, B056 = 9,0, B065 = 0,0, B055 = 9,0}

Wie soll ich die Hashmap so sortieren, dass das Alphabet gefolgt von den Zahlen berücksichtigt wird?

Die resultierende Hashmap sollte folgendermaßen aussehen:

{A052 = 0,0, A061 = 3,0, A071 = 0,0, B046 = 0,0, B055 = 9,0, B056 = 9,0, B065 = 0,0, B066 = 0,0, B075 = 3,0, B076 = 9,0, B085 = 0,0, B086 = 3,0, B095 = 0,0, B096 = 0,0}

Schätzen Sie die Hilfe!

user1008697
quelle
3
Hashmap ist für die Suche. Es hascht Dinge. Es hält die Ordnung nicht aufrecht.
Muhammad Hasan Khan
2
@ HasanKhan .. wer hat das überhaupt gefragt?
eRaisedToX

Antworten:

238

Verwenden Sie sortiert TreeMap:

Map<String, Float> map = new TreeMap<>(yourMap);

Es werden automatisch Einträge sortiert nach Schlüsseln. Ich denke, natürliche StringBestellung wird in Ihrem Fall in Ordnung sein.

Beachten Sie, dass HashMapaufgrund von Suchoptimierungen die Reihenfolge nicht erhalten bleibt.

Tomasz Nurkiewicz
quelle
Hallo @Tomasz Nurkiewicz Wie kann ich die umgekehrte Reihenfolge bekommen?
Raghavendra
Kann ich meinen eigenen Komparator anwenden
Fakher
Tolle Lösung! Es gibt ein Prob mit 2-stelligen Nummern, die Sortierung wird zu 1, 10, 11,12,2,3,4,5. Gibt es dafür eine Lösung?
Rachita Nanda
@RachitaNanda, Sie könnten versuchen, die Ziffern mit Integer als String zu speichern.
Krishna
27

Verwenden Sie eine TreeMap mit einem benutzerdefinierten Komparator.

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());

Wenn Sie neue Elemente hinzufügen, werden diese automatisch sortiert.

In Ihrem Fall ist möglicherweise nicht einmal die Implementierung eines Komparators erforderlich, da die Reihenfolge der Zeichenfolgen möglicherweise ausreichend ist. Wenn Sie jedoch Sonderfälle implementieren möchten, z. B. Kleinbuchstaben vor Großbuchstaben, oder die Zahlen auf eine bestimmte Weise behandeln möchten, verwenden Sie den Komparator.

Kal
quelle
11

TreeMapist die beste Wahl für diese Art der Sortierung (natürlich). TreeMapnatürlich sortiert nach den Schlüsseln.

HashMapbehält weder die Einfügereihenfolge bei noch sortiert es die Karte. LinkedHashMapbehält die Einfügereihenfolge bei, sortiert die Karte jedoch nicht automatisch. Nur TreeMapin der MapBenutzeroberfläche wird die Karte nach natürlicher Reihenfolge sortiert (Ziffern zuerst, Großbuchstaben zweitens, Kleinbuchstaben zuletzt).

Roshnal
quelle
5

Verwenden Sie eine TreeMap , obwohl es etwas nebulös ist, eine Karte "so aussehen" zu lassen. Sie können die Schlüssel auch einfach nach Ihren Kriterien sortieren und über die Karte iterieren und jedes Objekt abrufen.

Dave Newton
quelle
3

Verwenden Sie einfach eine TreeMap. Es implementiert die SortedMapSchnittstelle und sortiert somit automatisch die darin enthaltenen Schlüssel. Ihre Schlüssel können einfach alphabetisch sortiert werden, um das gewünschte Ergebnis zu erzielen, sodass Sie nicht einmal einen Komparator bereitstellen müssen.

HashMaps werden niemals sortiert. Das einzige, was Sie mit einer HashMap tun können, ist, alle Schlüssel abzurufen, sie in einem sortierten Satz oder in einer Liste zu speichern und die Liste zu sortieren.

JB Nizet
quelle
3

Mit der TreeMap können Sie die Karte sortieren.

Map<String, String> map = new HashMap<String, String>();        
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
    System.out.println(str);
}
BERGUIGA Mohamed Amine
quelle
3

Sie können verwenden TreeMap, um Werte in sortierter Form zu speichern.

Map <String, String> map = new TreeMap <String, String>();
Saurabh Prajapati
quelle
1

TreeMap wird automatisch in aufsteigender Reihenfolge sortiert. Wenn Sie in absteigender Reihenfolge sortieren möchten, verwenden Sie den folgenden Code:

Kopieren Sie den folgenden Code innerhalb Ihrer Klasse und außerhalb der Hauptausführungsmethode:

static class DescOrder implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {      
        return o2.compareTo(o1);
    }
    }

Dann in Ihrer Logik:

TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");
JavaGeek
quelle
1

Verwenden Sie TreeMap (Konstruktor):

Map<String, Float> sortedMap = new TreeMap<>(yourMap);

Verwenden Sie TreeMap (PutAll-Methode):

Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);

Implementierung der Kartenschnittstelle:

  1. TreeMap - Sortieren Sie die Schlüssel beim Einfügen automatisch in aufsteigender Reihenfolge.
  2. HashMap - Die Reihenfolge des Einfügens wird nicht beibehalten.
  3. LinkedHashMap - Die Reihenfolge des Einfügens wird beibehalten.
Sangeeth
quelle