Java에서 HashMap은 정렬되지 않은 키-값 쌍 모음입니다. HashMap을 값별로 정렬하려면 HashMap 자체가 내장된 정렬 방법을 제공하지 않기 때문에 외부 정렬 알고리즘을 사용할 수 있습니다.
한 가지 일반적인 접근 방식은 HashMap을 연결된 목록으로 변환하는 것입니다. 항목을 선택하고 연결된 목록을 값별로 정렬한 다음 HashMap을 다시 작성하세요. 이 프로세스 중에 키-값 쌍이 연결된 상태를 유지하기 위해 원래 키-값 순서를 유지하면서 값을 비교하는 비교기를 사용합니다.
다음 코드 조각은 이 접근 방식을 보여줍니다.
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()); } } }
이 코드는 원래 키-값을 유지하면서 값을 평가하는 비교기를 구현하여 오름차순 및 내림차순 정렬을 모두 보여줍니다. 관계.
위 내용은 Java HashMap을 해당 값을 기준으로 오름차순 및 내림차순으로 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!