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

是否存在可按value自动排序的Java Map结构实现?

解答

JDK 原生标准库中不存在符合你要求的可自动按 value 排序的 SortedMap 实现。原因是 SortedMap 接口的契约明确规定,排序规则必须基于 key 的自然顺序或构造时传入的 key 比较器,JDK 内置的所有 SortedMap 实现(例如 TreeMap)都严格遵循这一约束。


可直接使用的第三方实现

如果你可以引入第三方依赖,Apache Commons Collections 4.0 及以上版本提供的 ValueSortedMap 完全匹配你的需求:所有 put、remove 等修改操作执行时,都会自动高效地按 value 重排顺序,性能和 TreeMap 处于同一量级。

示例代码如下:

import org.apache.commons.collections4.map.ValueSortedMap;
import java.util.Map;

public class ValueSortTest {
    public static void main(String[] args) {
        // 传入value的比较器,这里用Integer自然升序,即可得到你要的输出效果
        Map<String, Integer> map = ValueSortedMap.valueSortedMap(Integer::compareTo);
        map.put("apple", 100);
        map.put("orange", 10);
        map.put("banana", 5);
        System.out.println(map);
    }
}

运行后控制台输出结果和你预期完全一致:
{banana=5, orange=10, apple=100}


补充说明

  • ValueSortedMap 允许 value 重复,相同 value 对应的 key 默认按插入顺序排列,你也可以自定义比较器调整同 value 场景下的排序逻辑。
  • 如果不能引入第三方依赖,你可以自行封装实现:组合一个 HashMap 存储键值对,搭配一个 TreeSet 存储按 value 排序的 Map.Entry 实例,所有修改操作同步更新两个容器即可,需要注意处理 value 重复、并发安全等边界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:06:04