HashMap 排序题

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

思路:
HashMap本身不可以排序的。但是该题需要对HashMap排序,所以我们会首先想到LinkedHashMap。LinkedHashMap既是哈希表又是链表结构,是有序的。

凡是对集合的操作,我们应该保持一个原则就是能用jdk中的api就用,所以这次排序,我们用collections工具提供的排序。如果需要使用,那么久必须把集合变成list集合。

public class HashMapTest{
    public static void main(String[] args){
        HashMap users = new HashMap();
        users.put(1,new User("zhangsan",25));
        users.put(3,new User("lisi",22));
        users.put(2,new User("wangwu",27));
        bianli(users);
        HashMap sortHashMap = sortHashMap(users);
        bianli(sortHashMap);
    }
/*方法一:
    private static void bianli(HashMap users){
         Iterator it = users.keySet().iterator();
         for(Integer key : users.keySet()){
             String name = users.get(key).getName();
             Int age = users.get(key).getAge();
             System.out.print(key+"::"+name+":"+":"+age+"  ");
         }
         System.out.println();
    }
*/
//方法二:
     private static void bianli(HashMap users) {
            Iterator> entryIterator = users.entrySet().iterator();
            for (Map.Entry entry : users.entrySet()) {
                String name = entry.getValue().getName();
                int age = entry.getValue().getAge();
                System.out.print(entry.getKey()+"::"+name+":"+":"+age+"  ");
            }
            System.out.println();
        }
     private static HashMap sortHashMap(HashMap users) {
        //1.拿到键值对集合
        Set> entrySet = users.entrySet();
        //2.将 set 集合转为 List 集合,为什么,为了使用工具类的排序方法
        ArrayList> arrayList = new ArrayList>(entrySet);
        //3. 使用 Collections 集合工具类对 list 进行排序,排序规则使用匿名内部类来实现
        Collections.sort(arrayList, new Comparator>() {
            @Override
            public int compare(Map.Entry o1, Map.Entry o2) {
                 //4.按照要求根据 User 的 age 的倒序进行排
                return o2.getValue().getAge()-o1.getValue().getAge();
            }
        });

        //5.创建一个新的有序的 HashMap 子类的集合
        LinkedHashMap linkedHashMap = new LinkedHashMap();
        //将 List 中的数据存储在 LinkedHashMap 中
        for (Map.Entry entry : arrayList) {
            linkedHashMap.put(entry.getKey(), entry.getValue());
        }
        return linkedHashMap;
    }
}

你可能感兴趣的:(JAVA)