是否存在可按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
相关产品推荐
相关产品推荐

