Java集合

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。Java集合,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

集合练习题

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

思路: 先把Map转成Set,再把Set转成List,利用工具类把List排序,最后使用LinkedHashMap作为结果集

public static void main(String[] args) throws Exception {
        HashMap<Integer, Person> persons = new HashMap<>();
        persons.put(1,new Person(12,"孙悟空"));
        persons.put(2,new Person(14,"猪八戒"));
        persons.put(3,new Person(13,"唐僧"));
        for (Map.Entry entry : persons.entrySet()){
            System.out.println(entry.getKey()+" , "+entry.getValue());
        }
        HashMap<Integer, Person> integerPersonHashMap = sortMap(persons);
        System.out.println("-------------------------------");
        for (Map.Entry entry : integerPersonHashMap.entrySet()){
            System.out.println(entry.getKey()+" , "+entry.getValue());
        }

    }

    public static HashMap<Integer,Person> sortMap(HashMap<Integer,Person> map){
        Set<Map.Entry<Integer, Person>> entries = map.entrySet();
        //把Set转换成List
        List<Map.Entry<Integer, Person>> list = new ArrayList<Map.Entry<Integer,Person>>(entries);
        //对List进行排序
        Collections.sort(list, new Comparator<Map.Entry<Integer, Person>>() {
            @Override
            public int compare(Map.Entry<Integer, Person> o1, Map.Entry<Integer, Person> o2) {
                //倒序,后面减前面
                return o2.getValue().getAge() - o1.getValue().getAge();
            }
        });
        //HashMap的子类里面有序的就只有LinkedHashSet了
        LinkedHashMap<Integer, Person> resultMap = new LinkedHashMap<>();
        for (Map.Entry<Integer,Person> entry : list){
            resultMap.put(entry.getKey(),entry.getValue());
        }
        return resultMap;
    }

2. 用面向对象(Map)的方法求出数组中重复 value 的个数,按如下个数输出:
4 出现:5 次
5 出现:4 次
1 出现:3 次
2 出现:2 次
8 出现:2 次
6 出现:1 次
7 出现:1 次

public static void main(String[] args) throws Exception {
        int[] arr = {1, 4, 1, 4, 2, 5, 4, 5, 8, 7, 8, 77, 88, 5, 4, 9, 6, 2, 4, 1, 5};
        HashMap<Integer, Integer> map = new HashMap<>();
        //把数据存入到Map中: key-数字  value-数字出现次数
        for (int i = 0; i < arr.length; i++) {
            Integer tmp = map.get(arr[i]);
            int v = (tmp != null) ? (tmp.intValue() + 1) : 1;
            map.put(arr[i],v);
        }
        //开始对Map进行排序
        ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
        //对List进行排序
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                //先按value升序,再按key升序
                int tmp = o2.getValue() - o1.getValue();
                return (tmp == 0) ? o1.getKey() - o2.getKey() : tmp;
            }
        });
        for (Map.Entry<Integer,Integer> mapping : list){
            System.out.println(mapping.getKey() + " 出现:" + mapping.getValue() + " 次");
        }

    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/202519.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!