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

来源:互联网 发布:管家婆erp端口 编辑:程序博客网 时间:2024/04/29 07:31


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 0
原创粉丝点击