TreeMap 按value 值排序 --- 把TreeMap的EntrySet转换成list

TreeMap底层根据红黑树的数据结构构建,默认根据key的自然排序来组织(比如integer的大小,String的字典排序)。所以,TreeMap只能根据key来排序,是不能根据value来排序的(否则key来排序根本就不能形成TreeMap)。

要根据value值对TreeMap进行排序,大致的思路是把TreeMap的EntrySet转换成list,然后使用Collections.sor排序

一、Map的 Entry 对象

1、Entry: 键值对 对象。

在Map类设计是,提供了一个嵌套接口(static修饰的接口):Entry。Entry将键值对的对应关系封装成了对象,即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。

2、Entry为什么是静态的?

Entry是Map接口中提供的一个静态内部嵌套接口,修饰为静态可以通过类名调用。

Map集合遍历键值对的方式:

 Set<Map.Entry<K,V>> entrySet();
    //返回此映射中包含的映射关系的Set视图

该方法返回值是Set集合,里面装的是Entry接口类型,即将映射关系装入Set集合。

3、实现步骤:

1,调用Map集合中的entrySet()方法,将集合中的映射关系对象存储到Set集合中

2,迭代Set集合

3,获取Set集合的元素,是映射关系的对象

4,通过映射关系对象的方法,getKey()和getValue(),获取键值对

(原文链接: https://blog.youkuaiyun.com/weixin_39590058/article/details/79933984)

二、具体实现

先创建一个list用来存放排序后的值

List<Map.Entry<Integer, Map>> list = 
             new ArrayList<Map.Entry<Integer, Map>>(zeroTreeMap.entrySet());

因为 Collections.sort 是对list 进行操作,重写Comparator比较器

Collections.sort(list, new Comparator<Map.Entry<Integer, Map>>() {
	@Override
	public int compare(Entry<Integer, Map> o1, Entry<Integer, Map> o2) {
		return o1.getValue().compareTo(o2.getValue());        
	} 
}
  • 返回负数表示:o1 小于o2,
  • 返回0 表示:o1和o2相等,
  • 返回正数表示:o1大于o2。

所以

  • 升序排列: o2 - o1
  • 降序排列: o1 - o2

(原文链接:https://blog.youkuaiyun.com/weixin_45483749/article/details/107866478)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值