已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性。请写一个方法实现对HashMap 的排序功能,该方法接收 HashMap<Integer,User>为形参,返回类型为 HashMap<Integer,User>,要求对 HashMap 中的 User 的 age 倒序进行排序。排序时 key=value 键值对不得拆散。
public static void main(String[] args) {
//对HashMap集合进行排序,HashMap是无序的
HashMap<Integer, User> map = new HashMap<Integer, User>();
map.put(1, new User("tom",30));
map.put(2, new User("regan",13));
map.put(3, new User("ALEX",14));
map.put(4, new User("GG",8));
System.out.println(map);
map =sort(map);
System.out.println(map);
}
/**
* 对HashMap进行排序
* @param map
* @return
*/
public static LinkedHashMap<Integer,User> sort(HashMap<Integer,User> map) {
//将HashMap对象转换为set集合
Set<Entry<Integer,User>> entrySet = map.entrySet();
//将set 集合对象变成arraylist集合
ArrayList<Entry<Integer, User>> list = new ArrayList<Entry<Integer,User>>();
for (Entry<Integer, User> entry : entrySet) {
list.add(entry);
}
//对list集合进行排序,采用collections提供的sort 方法
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();
}
});
LinkedHashMap<Integer, User> map2 = new LinkedHashMap<Integer, User>();
for(Entry<Integer, User> entry : list) {
map2.put(entry.getKey(), entry.getValue());
}
return map2;
}
输出结果:
{1=User [name=tom, age=30], 2=User [name=regan, age=13], 3=User [name=ALEX, age=14], 4=User [name=GG, age=8]}
{1=User [name=tom, age=30], 3=User [name=ALEX, age=14], 2=User [name=regan, age=13], 4=User [name=GG, age=8]}
参考文章
图解LinkedHashMap原理