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!


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.


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.


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).


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.


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.


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);
}

3

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

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

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");

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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.