首頁 > Java > java教程 > 如何在 Java 中按值對 HashMap 進行排序,同時保留鍵值對?

如何在 Java 中按值對 HashMap 進行排序,同時保留鍵值對?

Susan Sarandon
發布: 2024-11-28 13:50:11
原創
780 人瀏覽過

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

按值對 Hashmap 進行排序

問題:

問題:

我們需要根據值對 HashMap進行排序它包含的值,並在期間維護鍵值對

解決方案:
  1. 按值對 HashMap 進行排序可以使用通用方法來完成。以下步驟概述了這個過程:
  2. 建立連結清單:將 HashMap 條目轉換為 LinkedList,確保保留插入順序。
  3. 自訂比較器:定義自訂比較器來比較條目的值。它應該考慮升序和降序選項。
  4. 對清單進行排序:使用自訂比較器根據值對 LinkedList 進行排序。由於條目是連結的,因此鍵也會排序。
  5. 轉換為排序的 HashMap: 使用排序的 LinkedList 建構一個新的 LinkedHashMap,其中鍵和值原樣關聯在原始 HashMap 中。

自訂版本:排序方法的定製版本可以是創建,允許特定的升序或降序值排序。

範例實作:
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 程式碼實作排序演算法:

以上是如何在 Java 中按值對 HashMap 進行排序,同時保留鍵值對?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板