ホームページ >Java >&#&チュートリアル >Java でツリーマップを値で並べ替えるにはどうすればよいですか?

Java でツリーマップを値で並べ替えるにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-21 16:16:12203ブラウズ

How Can I Sort a TreeMap by its Values in Java?

値によるツリーマップの並べ替え

概要:

ツリーマップでは、要素が並べ替えられます実装に応じて、キーまたは値の自然な順序に基づいています。ただし、コンパレータを使用すると、エントリの値に基づいて TreeMap を並べ替えることができます。

解決策:

TreeMap を値で直接並べ替えることはできません。 byValue コンパレータで試した構文は正しくありません。

ただし、TreeMap のエントリを含むカスタム SortedSet を作成することで、目的の機能を実現できます。この SortedSet は、entriesSortedByValues() メソッドを使用して作成できます。

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;
}

このメソッドは、値が Comparable である Map を受け取り、エントリの値によって並べ替えられた Map.Entry の SortedSet を返します。

このメソッドを使用するには:

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}"

SortedSet<Map.Entry<String,Integer>> sortedEntries = entriesSortedByValues(map);
System.out.println(sortedEntries); // prints "[C=1, B=2, A=3]"

整数に関する注意等価性:

== を使用して整数値を比較する場合、値の同一性ではなく、参照の同一性がチェックされます。整数値が等しいかどうかを比較するには、equals() メソッドを使用することをお勧めします。

以上がJava でツリーマップを値で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。