En Java, un HashMap est une collection non triée de paires clé-valeur. Pour trier un HashMap par ses valeurs, nous pouvons utiliser des algorithmes de tri externes, car le HashMap lui-même ne fournit pas de méthode de tri intégrée.
Une approche courante consiste à convertir le HashMap en une liste chaînée de ses valeurs. entrées, triez la liste chaînée par valeur, puis reconstruisez le HashMap. Pour garantir que les paires clé-valeur restent liées pendant ce processus, nous utilisons un comparateur qui compare les valeurs tout en préservant l'ordre clé-valeur d'origine.
L'extrait de code suivant illustre cette approche :
import java.util.*; public class HashMapSorting { private static final boolean ASC = true; private static final boolean DESC = false; public static void main(String[] args) { // Creating dummy unsorted HashMap HashMap<String, Integer> unsortedMap = new HashMap<>(); unsortedMap.put("B", 55); unsortedMap.put("A", 80); unsortedMap.put("D", 20); unsortedMap.put("C", 70); System.out.println("Before sorting..."); printMap(unsortedMap); System.out.println("After sorting ascending order..."); Map<String, Integer> sortedMapAsc = sortByValue(unsortedMap, ASC); printMap(sortedMapAsc); System.out.println("After sorting descending order..."); Map<String, Integer> sortedMapDesc = sortByValue(unsortedMap, DESC); printMap(sortedMapDesc); } private static <K extends Comparable<K>, V extends Comparable<V>> Map<K, V> sortByValue(Map<K, V> unsorted, final boolean order) { List<Map.Entry<K, V>> list = new LinkedList<>(unsorted.entrySet()); list.sort((o1, o2) -> order ? o1.getValue().compareTo(o2.getValue()) == 0 ? o1.getKey().compareTo(o2.getKey()) : o1.getValue().compareTo(o2.getValue()) : o2.getValue().compareTo(o1.getValue()) == 0 ? o2.getKey().compareTo(o1.getKey()) : o2.getValue().compareTo(o1.getValue())); return list.stream().collect( Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b, LinkedHashMap::new ) ); } private static void printMap(Map<String, Integer> map) { for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); } } }
Ce code illustre le tri par ordre croissant et décroissant en implémentant un comparateur qui évalue les valeurs tout en préservant les relations clé-valeur d'origine.
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!