Heim > Java > javaLernprogramm > Wie kann ich eine HashMap nach ihren Werten sortieren und gleichzeitig Schlüssel-Wert-Paare in Java beibehalten?

Wie kann ich eine HashMap nach ihren Werten sortieren und gleichzeitig Schlüssel-Wert-Paare in Java beibehalten?

Susan Sarandon
Freigeben: 2024-11-28 13:50:11
Original
753 Leute haben es durchsucht

How can I sort a HashMap by its values while preserving key-value pairs in Java?

Hashmap nach Werten sortieren

Problem:

Wir müssen eine HashMap basierend auf sortieren die darin enthaltenen Werte und behalten dabei die Schlüssel-Wert-Paare bei Sortieren.

Lösung:

Das Sortieren einer HashMap nach Werten kann mit einem generischen Ansatz erfolgen. Die folgenden Schritte beschreiben den Prozess:

  1. Erstellen Sie eine verknüpfte Liste: Konvertieren Sie die HashMap-Einträge in eine LinkedList und stellen Sie dabei sicher, dass die Einfügereihenfolge erhalten bleibt.
  2. Benutzerdefinierter Komparator: Definieren Sie einen benutzerdefinierten Komparator, um die Werte der Einträge zu vergleichen. Es sollte sowohl Optionen für aufsteigende als auch absteigende Reihenfolge berücksichtigen.
  3. Liste sortieren: Verwenden Sie den benutzerdefinierten Komparator, um die LinkedList basierend auf den Werten zu sortieren. Da die Einträge verknüpft sind, werden auch die Schlüssel sortiert.
  4. In sortierte HashMap konvertieren: Verwenden Sie die sortierte LinkedList, um eine neue LinkedHashMap zu erstellen, in der die Schlüssel und Werte so verknüpft sind, wie sie waren in der ursprünglichen HashMap.
  5. Benutzerdefinierte Version: Eine maßgeschneiderte Version der Sortiermethode kann sein erstellt, was eine bestimmte aufsteigende oder absteigende Reihenfolge der Werte ermöglicht.

Beispielimplementierung:

Der folgende Java-Code implementiert den Sortieralgorithmus:

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class SortMapByValue {

    public static final boolean ASC = true;
    public static final boolean DESC = false;

    public static void main(String[] args) {

        // Create dummy HashMap
        Map<Integer, String> unsortedMap = new HashMap<>();
        unsortedMap.put(1, "froyo");
        unsortedMap.put(2, "abby");
        unsortedMap.put(3, "denver");
        unsortedMap.put(4, "frost");
        unsortedMap.put(5, "daisy");

        // Sort in ascending order
        Map<Integer, String> sortedMapAsc = sortByValue(unsortedMap, ASC);

        // Sort in descending order
        Map<Integer, String> sortedMapDesc = sortByValue(unsortedMap, DESC);

        // Print sorted maps
        System.out.println("Sorted Ascending:");
        printMap(sortedMapAsc);
        System.out.println("Sorted Descending:");
        printMap(sortedMapDesc);
    }

    private static Map<Integer, String> sortByValue(Map<Integer, String> map, boolean order) {

        List<Entry<Integer, String>> list = new LinkedList<>(map.entrySet());

        // Custom comparator for values
        Collections.sort(list, new Comparator<Entry<Integer, String>>() {
            public int compare(Entry<Integer, String> o1, Entry<Integer, String> o2) {
                if (order) {
                    return o1.getValue().compareTo(o2.getValue());
                } else {
                    return o2.getValue().compareTo(o1.getValue());
                }
            }
        });

        // Return sorted LinkedHashMap
        Map<Integer, String> sortedMap = new LinkedHashMap<>();
        for (Entry<Integer, String> entry : list) {
            sortedMap.put(entry.getKey(), entry.getValue());
        }

        return sortedMap;
    }

    public static void printMap(Map<Integer, String> map) {
        for (Entry<Integer, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }
        System.out.println();
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich eine HashMap nach ihren Werten sortieren und gleichzeitig Schlüssel-Wert-Paare in Java beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage