값으로 TreeMap 정렬
TreeMap은 키가 자연 순서에 따라 오름차순으로 정렬되는 정렬 맵입니다. 값을 기준으로 사용자 정의 정렬이 필요한 경우 대신 값을 평가하는 비교기를 사용해야 합니다.
이러한 비교기를 구현하려는 시도는 다음과 같습니다.
class byValue implements Comparator<Map.Entry<String, Integer>> { public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) { if (e1.getValue() < e2.getValue()) { return 1; } else if (e1.getValue() == e2.getValue()) { return 0; } else { return -1; } } }
그러나 TreeMap은 값만을 기준으로 정렬할 수 없기 때문에 이 접근 방식에는 결함이 있습니다. 해당 키와 연관된 값이 아닌 해당 키를 정렬하도록 설계되었습니다.
대체 솔루션: Map.Entry 정렬
이 제한을 극복하기 위해 외부 컬렉션을 사용할 수 있습니다. Map.entrySet() 컬렉션을 정렬하는 데 사용됩니다. 이 정렬된 집합을 사용하면 값을 기준으로 필터링하고 정렬할 수 있습니다. 다음은 값을 기준으로 Map.entrySet()을 정렬하는 일반적인 방법입니다.
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; } } ); sortedEntries.addAll(map.entrySet()); return sortedEntries; }
이 방법을 사용하면 아래 설명과 같이 값을 기준으로 정렬된 Map.Entries 집합을 얻을 수 있습니다.
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]"
정수 평등에 대한 참고 사항
가치가 있습니다 제공된 코드는 ==를 사용하여 정수 값을 비교합니다. 이는 값 동일성이 아닌 참조 동일성을 확인하므로 일반적으로 권장되지 않습니다. 일부 시나리오에서는 예상치 못한 결과가 발생할 수 있습니다. 대신 값 비교를 위해 CompareTo()와 같은 메서드를 사용하는 것이 좋습니다.
위 내용은 키가 아닌 값으로 TreeMap을 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!