HashMap根据value的值排序,如何实现?

来源:5-3 自定义类型的集合排序

20221206

2023-03-07 17:42:12

HashMap<String, Integer> goodsPriceMap = new HashMap<>()

goodsPriceMap.put("A1", 2);

goodsPriceMap.put("A2", 3);

goodsPriceMap.put("A3", 4);

goodsPriceMap.put("A4", 5);

goodsPriceMap.put("A5", 8);

goodsPriceMap.put("A6", 6);


将goodsPriceMap根据value值从大到小排序,该怎么实现?

可以用Comparator接口比较器吗?


写回答

1回答

好帮手慕小尤

2023-03-07

同学你好,同学可以参考下方代码,

import java.util.*;
public class Test {
    public static Map<String, Integer> sortMap(Map<String, Integer> map) {
        //利用Map的entrySet方法,转化为list进行排序
        List<Map.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet());
        //利用Collections的sort方法对list排序
        Collections.sort(entryList, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                //正序排列,倒序反过来
                return o1.getValue() - o2.getValue();
            }
        });
        //遍历排序好的list,一定要放进LinkedHashMap,因为只有LinkedHashMap是根据插入顺序进行存储
        LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<String, Integer>();
        for (Map.Entry<String,Integer> e : entryList) {
            linkedHashMap.put(e.getKey(),e.getValue());
        }
        return linkedHashMap;
    }
    public static void main(String[] args) {
        HashMap<String, Integer> goodsPriceMap = new HashMap<>();
        goodsPriceMap.put("A1", 2);
        goodsPriceMap.put("A2", 3);
        goodsPriceMap.put("A3", 4);
        goodsPriceMap.put("A4", 5);
        goodsPriceMap.put("A5", 8);
        goodsPriceMap.put("A6", 6);
        System.out.println(goodsPriceMap);
        Map<String, Integer> sortMap = sortMap(goodsPriceMap);
        System.out.println(sortMap);
    }
}

祝学习愉快!

0

0 学习 · 9886 问题

查看课程