ホームページ > Java > &#&チュートリアル > Java HashMap をその値で昇順および降順に並べ替えるにはどうすればよいですか?

Java HashMap をその値で昇順および降順に並べ替えるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-03 05:24:09
オリジナル
900 人が閲覧しました

How can I sort a Java HashMap by its values in ascending and descending order?

値による HashMap の並べ替え

Java では、HashMap はキーと値のペアの並べ替えられていないコレクションです。 HashMap をその値で並べ替えるには、HashMap 自体が組み込みの並べ替えメソッドを提供していないため、外部の並べ替えアルゴリズムを使用できます。

一般的なアプローチの 1 つは、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート