You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据HashMap的ArrayList<Integer>值长度对HashMap进行排序

错误原因

Collections.sort()方法要求第一个入参必须为List类型,而HashMap.values()的返回值是Collection接口实现类,不满足List的类型约束,因此会抛出类型不匹配异常。
另外如果直接对values排序,会丢失ArrayList对应的原key关联关系,通常建议对entrySet进行排序保留完整键值对映射。

解决方案

场景1:需要保留键值对对应关系(推荐)

排序后仍可获取每个ArrayList对应的原key:

Java 8及以上版本写法
HashMap<Integer, ArrayList<Integer>> NameofMap = new HashMap<Integer, ArrayList<Integer>>();
// 先将entrySet转为List
List<Map.Entry<Integer, ArrayList<Integer>>> sortedEntry = new ArrayList<>(NameofMap.entrySet());
// 按ArrayList长度升序排序,需要降序可追加.reversed()
sortedEntry.sort(Comparator.comparingInt(entry -> entry.getValue().size()));
Java 7及更低版本写法
HashMap<Integer, ArrayList<Integer>> NameofMap = new HashMap<Integer, ArrayList<Integer>>();
List<Map.Entry<Integer, ArrayList<Integer>>> sortedEntry = new ArrayList<Map.Entry<Integer, ArrayList<Integer>>>(NameofMap.entrySet());
Collections.sort(sortedEntry, new Comparator<Map.Entry<Integer, ArrayList<Integer>>>() {
    @Override
    public int compare(Map.Entry<Integer, ArrayList<Integer>> o1, Map.Entry<Integer, ArrayList<Integer>> o2) {
        // 升序排序,需要降序可交换o1和o2的位置
        return Integer.compare(o1.getValue().size(), o2.getValue().size());
    }
});

场景2:仅需排序value,无需关联原key

如果你的需求只需要拿到排序后的ArrayList集合,不需要对应原key:

HashMap<Integer, ArrayList<Integer>> NameofMap = new HashMap<Integer, ArrayList<Integer>>();
// 先将values转为List再排序
List<ArrayList<Integer>> sortedValues = new ArrayList<>(NameofMap.values());
Collections.sort(sortedValues, new Comparator<ArrayList<Integer>>() {
    @Override
    public int compare(ArrayList<Integer> o1, ArrayList<Integer> o2) {
        return Integer.compare(o1.size(), o2.size());
    }
});

内容的提问来源于stack exchange,提问作者Tarasa Bell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:27:05