面试笔记----------HashMap排序

问题描述:

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

分析:

HashMap本身是不可排序的,只能在Api中有没有Map结构是有序的-----LinkedHashMap。

那么就开始码代码。

新建一个javabean

User.java

/**
 * Created by zuo on 16-6-7.
 */
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 +
                '}';
    }
}

新建一个Java的测试类

TestMain.java

import java.util.*;

public class TestMain {



    public static void main(String[] args) {

        HashMap<Integer , User> hashMap = new HashMap<Integer , User>();

        User user = new User();
        user.setName("张三");
        user.setAge(21);

        hashMap.put(1 , user);


        User user1 = new User();
        user1.setName("李四");
        user1.setAge(22);

        hashMap.put(2 , user1);

        User user2 = new User();

        user2.setName("王五");
        user2.setAge(23);

        hashMap.put(3 , user2);

        System.out.println("排序前的HashMap:" + hashMap);


        HashMap<Integer , User> sortedHashMap = sortHashMap(hashMap);

        System.out.println("排序后的HashMap:" + sortedHashMap);

    }

    private static HashMap<Integer, User> sortHashMap(HashMap<Integer, User> hashMap) {
        /**
         * 创建一个有序的HashMap数据结构,LinkHashMap
         */

        LinkedHashMap<Integer , User> newHashMap = new LinkedHashMap<Integer , User>();

        //凡是对集合进行排序,使用java提供的默认的工具类Collections


        /**
         * 把Map转成List
         *      1、把Map转成set
         *      2、把Set装成List
         */

        Set<Map.Entry<Integer, User>> entries = hashMap.entrySet();
        ArrayList<Map.Entry<Integer, User>> list = new ArrayList<>(entries);

        
        Collections.sort(list, new Comparator<Map.Entry<Integer, User>>() {
            @Override
            public int compare(Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) {


                /**
                 * 倒序 o2-o1  后-前
                 * 正序 o1-o2   前-后
                 */
                return o2.getValue().getAge() - o1.getValue().getAge();
            }
        });


        //将排序好的List转换成HahshMap

        for (int i = 0; i < list.size(); i++) {
            Map.Entry<Integer , User> entry = list.get(i);
            newHashMap.put(entry.getKey() , entry.getValue());
        }


        //将排序的HashMap返回
        return newHashMap;
    }
}

运行结果:

排序前的HashMap:{1=User{name='张三', age=21}, 2=User{name='李四', age=22}, 3=User{name='王五', age=23}}
排序后的HashMap:{3=User{name='王五', age=23}, 2=User{name='李四', age=22}, 1=User{name='张三', age=21}}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值