Rumah >Java >javaTutorial >Bagaimanakah saya boleh mengisih Java HashMap mengikut nilainya dalam susunan menaik dan menurun?
Di Java, HashMap ialah koleksi pasangan nilai kunci yang tidak diisih. Untuk mengisih HashMap mengikut nilainya, kita boleh menggunakan algoritma pengisihan luaran, kerana HashMap itu sendiri tidak menyediakan kaedah pengisihan terbina dalam.
Satu pendekatan biasa ialah menukar HashMap menjadi senarai terpautnya entri, susun senarai terpaut mengikut nilai, dan kemudian bina semula HashMap. Untuk memastikan pasangan nilai kunci kekal dipaut semasa proses ini, kami menggunakan pembanding yang membandingkan nilai sambil mengekalkan susunan nilai kunci asal.
Coretan kod berikut menunjukkan pendekatan ini:
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()); } } }
Kod ini menunjukkan pengisihan tertib menaik dan menurun dengan melaksanakan pembanding yang menilai nilai sambil mengekalkan yang asal perhubungan nilai utama.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengisih Java HashMap mengikut nilainya dalam susunan menaik dan menurun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!