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 进行遍历;