0%

HashMap排序题

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

代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package jcf;

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 HashMapTest {

public static HashMap<Integer,User> sortHashMap(HashMap<Integer,User> users){
//1.首先拿到users的键值对映射的集合
Set<Entry<Integer,User>> usersEntrySet = users.entrySet();
//2.将集合usersEntrySet转换为List集合,以方便进行排序
ArrayList<Entry<Integer,User>> usersList = new ArrayList<>(usersEntrySet);
//3.使用Collections工具列对usersList按照年龄逆序进行排序
Collections.sort(usersList, new Comparator<Entry<Integer,User>>() {

@Override
public int compare(Entry<Integer,User> o1, Entry<Integer,User> o2) {
//按照要求根据 User 的 age 的倒序进行排序
/*自然排序下:
* 如果o1中的age小于o2中的age,则返回负数
* 如果o1中的age大于o2中的age,则返回正数
* 相等则返回0
*
* 逆序排序则采取相反操作
*/
return o2.getValue().getAge() - o1.getValue().getAge();
}
});
//4.将usersList中的数据存放在LinkHashMap集合中
LinkedHashMap<Integer, User> usersLinkHashMap = new LinkedHashMap<>();
for (Entry<Integer, User> entry : usersList) {
usersLinkHashMap.put(entry.getKey(), entry.getValue());
}
return usersLinkHashMap;
}

public static void main(String[] args) {
HashMap<Integer,User> users = new HashMap<>();
users.put(1, new User("张三",25));
users.put(2, new User("李四",28));
users.put(3, new User("王五",23));
//调用sortHashMap方法对map集合进行按年龄从大到小排序
HashMap<Integer, User> sortHashMap = sortHashMap(users);
System.out.println(sortHashMap);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package jcf;

public class User {
private String name;
private Integer age;
public User(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}

}
运行结果
1
{2=User [name=李四, age=28], 1=User [name=张三, age=25], 3=User [name=王五, age=23]}
------ 本文结束------