>Java >java지도 시간 >키 대신 값을 기준으로 Java TreeMap을 정렬하려면 어떻게 해야 합니까?

키 대신 값을 기준으로 Java TreeMap을 정렬하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-16 19:46:15182검색

How Can I Sort a Java TreeMap by Its Values Instead of Keys?

값에 따른 TreeMap 정렬

Java의 TreeMap으로 작업할 때 키의 기본 자연 순서에 따른 정렬이 항상 충분하지 않을 수 있습니다. 이 기사에서는 해당 값을 기준으로 TreeMap을 정렬하는 대체 접근 방식을 탐색합니다.

문제 설명:

귀하가 TreeMap을 정렬할 수 있는 비교기를 설계하는 방법을 찾고 있습니다. 기본 키 순서 대신 해당 값을 기준으로 하는 TreeMap입니다. 초기 시도에서 오류가 반환되어 Map.Entry를 비교기에 전달하는 것에 대한 질문이 표시되었습니다.

해결책:

TreeMap을 값별로 직접 정렬할 수는 없지만, 이 작업을 수행하기 위해 외부 컬렉션을 사용하는 것이 가능합니다. Map.entrySet()을 추출하면 사용자 정의 비교기를 사용하여 해당 값을 기준으로 항목을 정렬할 수 있습니다.

제공된 일반 메소드인 EntrySortedByValues()는 Map.Entry 객체의 SortedSet을 생성하여 이를 수행합니다. . 이 메서드는 맵 값이 비교 가능해야 하며 값을 비교하여 항목을 결정하는 비교기를 적용합니다. 주문.

구현:

static <K, V extends Comparable<? super V>>
SortedSet<Map.Entry<K, V>> entriesSortedByValues(Map<K, V> map) {
    SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<>(
        new Comparator<Map.Entry<K, V>>() {
            @Override
            public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2) {
                int res = e1.getValue().compareTo(e2.getValue());
                return res != 0 ? res : 1;  // Handle equal values separately
            }
        }
    );
    sortedEntries.addAll(map.entrySet());
    return sortedEntries;
}

사용:

    Map<String, Integer> map = new TreeMap<>();
    map.put("A", 3);
    map.put("B", 2);
    map.put("C", 1);   

    System.out.println(map);  // prints "{A=3, B=2, C=1}"
    System.out.println(entriesSortedByValues(map));  // prints "[C=1, B=2, A=3]"

경고:

정렬된 세트 수정 또는 그 안에 있는 Map.Entry는 원본 지도의 "보기"가 아니기 때문에 예상치 못한 결과를 초래할 수 있습니다. 또한 ==를 Integer 객체와 함께 사용하는 것에 주의하세요. 이는 값 동일성이 아닌 참조 동일성을 수행하기 때문입니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.