Maison > Java > javaDidacticiel > Comment puis-je trier un HashMap par ses valeurs tout en préservant les paires clé-valeur en Java ?

Comment puis-je trier un HashMap par ses valeurs tout en préservant les paires clé-valeur en Java ?

Susan Sarandon
Libérer: 2024-11-28 13:50:11
original
784 Les gens l'ont consulté

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

Tri de Hashmap par valeurs

Problème :

Nous devons trier une HashMap en fonction de les valeurs qu'il contient et maintenir les paires clé-valeur pendant tri.

Solution :

Le tri d'un HashMap par valeurs peut être réalisé en utilisant une approche générique. Les étapes suivantes décrivent le processus :

  1. Créer une liste chaînée : Convertissez les entrées HashMap en une LinkedList, en vous assurant que l'ordre d'insertion est préservé.
  2. Comparateur personnalisé : Définissez un comparateur personnalisé pour comparer les valeurs des entrées. Il doit prendre en compte les options d'ordre croissant et décroissant.
  3. Trier la liste : Utilisez le comparateur personnalisé pour trier la LinkedList en fonction des valeurs. Puisque les entrées sont liées, les clés seront également triées.
  4. Convertir en HashMap trié : Utilisez la LinkedList triée pour construire une nouvelle LinkedHashMap, où les clés et les valeurs sont associées telles qu'elles étaient. dans le HashMap original.
  5. Version personnalisée : Une version personnalisée de la méthode de tri peut être créé, permettant un classement spécifique des valeurs ascendantes ou décroissantes.

Exemple d'implémentation :

Le code Java suivant implémente l'algorithme de tri :

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();
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal