Map中key值和Value值的排序(HashMap和TreeMap)

本文详细介绍了Java中HashMap和TreeMap的排序方法,包括Key值和Value值的升序及降序排序技巧。针对不同需求提供了多种实现方案,如使用Comparator接口自定义排序规则等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里有HashMap和TreeMap分别关于key值和Value值的排序:

一、TreeMap的排序

1.Key值排序

       TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序

 Map<String,Integer> map = new TreeMap<String, Integer>(
                new Comparator<String>() {
                    public int compare(String obj1, String obj2) {
                        // 降序排序
                        return obj2.compareTo(obj1);
                    }
                });

2.Value值排序

//对Value值进行降序排列
List<Map.Entry<String, Integer>> list=new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,Map.Entry<String, Integer> o2) {
			return o2.getValue().compareTo(o1.getValue());
		}		
	});


二、HashMap的排序

1.Key值排序

第一种:

List<String> list = new ArrayList<>(map.keySet());  
 Collections.sort(list); 
Object[] key =  map.keySet().toArray();    
Arrays.sort(key); 

第二种:

List arrayList = new ArrayList(map.entrySet());  
Collections.sort(arrayList, new Comparator()   
{  
  public int compare(Object arg1, Object arg2)   
 {  
    Map.Entry obj1 = (Map.Entry) arg1;  
    Map.Entry obj2 = (Map.Entry) arg2;  
    return (obj1.getKey()).toString().compareTo(obj2.getKey());  
  }  
}); 

2.Value值排序

   第一种:

List<Integer> valueList = new ArrayList<Integer>(map.values());
 Collections.sort(valueList);//取出Map的值

   第二种:

List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
	Collections.sort(list, new Comparator<Map.Entry<String, Integer>>(){
		public int compare(Map.Entry<String,Integer > o1, Map.Entry<String, Integer> o2){
		return (o2.getValue() - o1.getValue());}
});



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值