> Java > java지도 시간 > Java에서 키-값 쌍을 유지하면서 값을 기준으로 HashMap을 정렬하려면 어떻게 해야 합니까?

Java에서 키-값 쌍을 유지하면서 값을 기준으로 HashMap을 정렬하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-28 13:50:11
원래의
784명이 탐색했습니다.

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

값으로 해시맵 정렬

문제:

다음을 기반으로 HashMap을 정렬해야 합니다. 포함된 값을 확인하고 키-값 쌍을 유지합니다. sorting.

해결책:

HashMap을 값별로 정렬하는 것은 일반적인 접근 방식을 사용하여 수행할 수 있습니다. 다음 단계에서는 프로세스를 간략하게 설명합니다.

  1. 연결된 목록 만들기: 삽입 순서가 유지되도록 HashMap 항목을 LinkedList로 변환합니다.
  2. 사용자 정의 비교기: 항목 값을 비교하기 위해 사용자 정의 비교기를 정의합니다. 오름차순 및 내림차순 옵션을 모두 고려해야 합니다.
  3. 목록 정렬: 사용자 지정 비교기를 사용하여 값을 기준으로 LinkedList를 정렬합니다. 항목이 연결되어 있으므로 키도 정렬됩니다.
  4. 정렬된 HashMap으로 변환: 정렬된 LinkedList를 사용하여 키와 값이 원래대로 연결되는 새로운 LinkedHashMap을 구성합니다. 원래 HashMap에 있습니다.
  5. 사용자 정의 버전: 정렬 방법의 맞춤형 버전은 다음과 같습니다. 특정 오름차순 또는 내림차순 값 순서를 허용합니다.

구현 예:

다음 Java 코드는 정렬 알고리즘을 구현합니다.

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();
    }
}
로그인 후 복사

위 내용은 Java에서 키-값 쌍을 유지하면서 값을 기준으로 HashMap을 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿