要求: 已知一个HashMap<Integer, User>集合,User有name(String) 和age(int)属性,请写一个方法实现对HashMap的排序功能,该方法接收HashMap<Integer, User>为形参,返回类型为HashMap<Integer, User>,要求对HashMap中的User的age倒序进行排序,排序时key,value键值对不得拆散。
代码如下:
User.java
package com.test;
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
TestSort.java
package com.test;
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 class TestSort {
public static void main(String[] args) {
User user = new User();
user.setName("张三");
user.setAge(22);
User user2 = new User();
user2.setName("李四");
user2.setAge(24);
User user3 = new User();
user3.setName("王五");
user3.setAge(20);
HashMap<Integer,User> hashMap = new HashMap();
hashMap.put(1, user);
hashMap.put(2, user2);
hashMap.put(3, user3);
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 = new LinkedHashMap<Integer, User>();
//凡是对集合排序的,首先想到的就是集合的工具类
//把Map类转换为Set集合
Set<Entry<Integer, User>> entrySet = hashMap.entrySet();
//把Set集合转换为List集合
ArrayList<Entry<Integer, User>> list = new ArrayList<Entry<Integer, User>>(entrySet);
// 对list排序
Collections.sort(list, new Comparator<Entry<Integer, User>>(){
@Override
public int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {
return o2.getValue().getAge() - o1.getValue().getAge();
}
} );
//将排序好的List转换为LinkedHashMap
for(int i = 0; i < list.size(); i++) {
Entry<Integer, User> entry = list.get(i);
newHashMap.put(entry.getKey(), entry.getValue());
}
return newHashMap;
}
}
运行结果:
排序前: {1=User [name=张三, age=22], 2=User [name=李四, age=24], 3=User [name=王五, age=20]}
排序后: {2=User [name=李四, age=24], 1=User [name=张三, age=22], 3=User [name=王五, age=20]}