ホームページ > Java > &#&チュートリアル > Java でキーと値のペアを保持しながら、値で HashMap を並べ替えるにはどうすればよいですか?

Java でキーと値のペアを保持しながら、値で HashMap を並べ替えるにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-28 13:50:11
オリジナル
795 人が閲覧しました

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

値によるハッシュマップの並べ替え

問題:

に基づいてハッシュマップを並べ替える必要があります含まれる値を保持し、実行中にキーと値のペアを維持します。

解決策:

値による 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 中国語 Web サイトの他の関連記事を参照してください。

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