Java集合Map,set, list 之间的转换


Java集合Map,set, list 之间的转换

  

前言

    通过思维导图复习联系,看到一个HashMap排序题上机题之后有的一个感想,题目如下,看看你能时间出来么?


    已知一个HashMap<Integer,User>集合,User 有name(String)和age(int)属性。请写一个方法实现对HashMap的排序功能,该方法接受HashMap<Integer,User>为形参,返回列下为HashMap<Integer,User>,要求对HashMap中的User age 倒序排序,排序是key=value键值不得拆散。

 

     经过反反复复的试错,最终还是摸索出来了,在这里进行一个总结,也算是对自己一个成长的记录,当然有更好的实现方式,如图如下:


代码实践:

package com.itheima;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;
 
public classTestSort {
 
   public static void main(String[] args)
   {
      HashMap<Integer,User>hashMap=newHashMap<Integer,User>();
     
      Useruser=newUser();
      user.setName("张三");
      user.setAge(23);
     
      hashMap.put(1,user);
     
      Useruser1=new User();
      user1.setName("李四");
      user1.setAge(24);
     
      hashMap.put(2, user1);
     
      Useruser2=new User();
      user2.setName("王五");
       user2.setAge(21);
       hashMap.put(3, user2);
     
       System.out.println("排序前:"+hashMap);
       HashMap<Integer,User> sortedHashMap=sortHashMap(hashMap);
      System.out.println("排序后:"+sortedHashMap);
   }
 
  
   private static HashMap<Integer,User> sortHashMap(
        HashMap<Integer,User> hashMap){
      // 重点就是这个方法了    
      //创建一个有序的HashMap数据结构,LinkedHashMap
    LinkedHashMap<Integer,User> newHashMap=newLinkedHashMap<Integer,User>();
      //对map集合进行排序,有集合的工具类进行排序,凡是要对集合排序,首先想到的就是集合的工具类Collectons
       //集合之间是可以互相的转换的,list ,map, set ;所有这里必须将map集合转换为list 结构
    
    //那如何转换呢?把map集合转换成Set集合
    Set<Entry<Integer,User>>entrySet=hashMap.entrySet();
    //在把set 转换层list集合
   ArrayList<Entry<Integer,User>>list= new ArrayList<>(entrySet);
   //对list 进行排序
      Collections.sort(list, new Comparator<Entry<Integer,User>>(){
 
  //添加为实现的方法(Ctrl +1)
        @Override
        public intcompare(Entry<Integer, User> arg0,
              Entry<Integer,User> arg1){
            //前面的减后面的就是顺序排序
           //用后面的减去前面的就是倒序的排序
                   
           return arg0.getValue().getAge()-arg1.getValue().getAge();//顺序进行排序
           //returnarg1.getValue().getAge()-arg0.getValue().getAge();//倒序进行排序的
        }
        });
     
     
      //将排好序的list 转换为LinkedHasMap
      //进行一个遍历
      for(int i=0;i<list.size();i++){
        Entry<Integer,User>entry=list.get(i);
        newHashMap.put(entry.getKey(),entry.getValue());
       
      }
      return newHashMap;
   }
  
}


 

运行结果:


 

如果改成逆序:

代码一换就成了,代码如下:

        

 

 

 

 

小结:

     (1) 其中查询集合之间的转换,map,set, list 之间的转换本文中是Map转换成List,方法是将map转成Set之后,将set 再转换成list的方式。

     (2) 用到集合工具cllection;

     (3) 排序是顺序还是倒序

     (4) 用LinkedHashMasp 对list 进行遍历;

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值