Maison >Java >JavaBase >La carte en Java peut-elle être triée en fonction de la clé ?

La carte en Java peut-elle être triée en fonction de la clé ?

尚
original
2020-01-14 13:32:514263parcourir

La carte en Java peut-elle être triée en fonction de la clé ?

Méthodes de tri couramment utilisées pour les cartes en Java : trier par clé, trier par valeur. Recommandé : Tutoriel vidéo Java

1. Trier par clé

TreeMapb77a8d9c3c319e50d4b02a976b347910 sous le package java.util intégré de jdk peut répondre à de tels besoins. La méthode TreeMap (Comparatore3882fcc260fc32c6b751547559600d3 comparator) peut être triée par clé en passant notre comparateur personnalisé.

Méthode de tri ascendant par défaut :

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
 
public class TEST {
 
    public static void main(String[] args) {
        TEST t = new TEST();
        t.sort();
    }
     
    public void sort(){
        Map<String, String> treeMap = new TreeMap<String, String>();
        treeMap.put("c", "ccccc"); 
        treeMap.put("a", "aaaaa"); 
        treeMap.put("b", "bbbbb"); 
        treeMap.put("d", "ddddd"); 
        Set<String> s = treeMap.keySet();
        for (String key : s) { 
            System.out.println(key+" : "+treeMap.get(key)); 
        } 
    }
}

Résultat de sortie :

a : aaaaa
b : bbbbb
c : ccccc
d : ddddd

2. Tri par valeur

Le tri par valeur est relativement gênant. Il semble qu'il n'existe pas de structure de données directement disponible qui puisse gérer des exigences similaires, nous devons donc la convertir. nous-mêmes.

Le tri de la carte par valeur est très significatif. Des exigences similaires seront rencontrées dans de nombreuses situations. Sa valeur peut être considérée comme une règle ou un poids défini.

Principe : placez tous les éléments de la carte à trier dans une liste, puis utilisez une méthode statique de tri des collections (Liste8742468051c85b06f0a0af9e3e506b5c liste, Comparateur117c5a0bdb71ea9a9d0c2b99b03abe3e c)

Pour trier la liste, vous utilisez également un comparateur pour définir des règles de comparaison. Les éléments de la liste triée sont ensuite chargés dans la Map dans l'ordre. Afin de garantir définitivement que les éléments de la Map sont dans le même ordre que les éléments de la List triée, le type de données LinkedHashMap est utilisé.

Code d'implémentation

public class MapSortDemo {

    public static void main(String[] args) {

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

        map.put("KFC", "kfc");
        map.put("WNBA", "wnba");
        map.put("NBA", "nba");
        map.put("CBA", "cba");

        Map<String, String> resultMap = sortMapByKey(map);    //按Key进行排序
//        Map<String, String> resultMap = sortMapByValue(map); //按Value进行排序

        for (Map.Entry<String, String> entry : resultMap.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
    }
    
    /**
     * 使用 Map按value进行排序
     * @param map
     * @return
     */
    public static Map<String, String> sortMapByValue(Map<String, String> oriMap) {
        if (oriMap == null || oriMap.isEmpty()) {
            return null;
        }
        Map<String, String> sortedMap = new LinkedHashMap<String, String>();
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(
                oriMap.entrySet());
        Collections.sort(entryList, new MapValueComparator());

        Iterator<Map.Entry<String, String>> iter = entryList.iterator();
        Map.Entry<String, String> tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
}

Pour plus de connaissances sur Java, veuillez faire attention à la colonne Tutoriel de base Java sur le site Web PHP chinois.

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!

Déclaration:
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