软件构造:将HashMap数据按Value排序

在写实验程序时,需要将HashMap按照Value值进行排序。
首先我们需要了解一下HashMap的数据存储方式。按我个人的理解,可以将HashMap就看做一个根据Key值的hashCode进行散列的散列表(哈希),而每个hashCode对应一个K-V对,这个K-V对和我们在C语言中的struct结构体类似,在JAVA中可以看做一个对象中存储了两个值,这个对象就叫做Entry。
HashMap的内部方法entrySet()可以将其存储的Entry转化为集合Set形式存储,获得了这个Set之后,就可以将其加入到列表当中了

例如,我们现在有一个叫做AllTime的HashMap
其中K值类型为PlanningEntry,V值类型为Date
现在需要将PlanningEntry按照其对应的V值Date进行排序
首先创建一个存储类型为Map.Entry<PlanningEntry, Date>的List
然后将entrySet()获得的集合加入到这个list中
List<Map.Entry<PlanningEntry, Date>> list = new LinkedList<Map.Entry<PlanningEntry, Date>>(this.AllTime.entrySet());
//这样获得的list就是存储K-V对(Entry类对象)的列表了

接着需要将list中的Entry类对象进行排序,可以构造自己的Comparator,让list的sort()方法根据该Comparator进行排序。


public class EntryComparatorByDate implements Comparator<Map.Entry<PlanningEntry, Date>> {
	//这个Comparator实现了Comparator接口,需要比较类型为Map.Entry<PlanningEntry, Date>
	@Override
	public int compare(Entry<PlanningEntry, Date> o1, Entry<PlanningEntry, Date> o2) {
		Date d1 = o1.getValue();//每个Entry类对象可以根据getValue()方法来获得其中的value值
		Date d2 = o2.getValue();
		if(d1.before(d2))//比较Date(即Value值)以获得两个Entry的大小关系
			return -1;
		else if(d1.after(d2))
			return 1;
		else
			return 0;
	}

}

这样一来再将原来的list排序即可获得根据Value值排序后的列表了

list.sort(new EntryComparatorByDate());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值