前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HashMap按照value排序

HashMap按照value排序

作者头像
崔笑颜
发布2020-06-08 16:14:42
8480
发布2020-06-08 16:14:42
举报

面试题

给定一个HashMap<String, BuziObj> buziObjMap;,其中 BuziObj 实现了 Comparable 接口。现在需要将 buziObjMap 按照 BuziObj 有序输出。注意,BuziObj 实例有可能相等,要求多次返回的结果一致。可以使用JDK提供的各种API。

当时自己的想法是,将 buziObjMap 的 values 放在一个 List 中。然后使用 Collections.sort(valuesList) 对存放 values 的 valuesList 排序。再遍历排序之后的 valuesList 和 buziObjMap,比对 valuesList 与 buziObjMap 中的值,相等之后,将当前 buziObjMap 中的 Entry 放在 LinkedHashMap 中,返回 LinkedHashMap 即可。

但是如上解法主要存在两个问题: 1,不满足多次执行返回结果一致这个要求,因为在遍历 valuesList 与 buziObjMap 时,buziObjMap的输出顺序无法保证每次都是一致的。 2,算法的复杂度过大。

实际遇到的问题

代码语言:javascript
复制
List<Map.Entry<K, V>> list =  
            new LinkedList<Map.Entry<K, V>>( map.entrySet() );  
        Collections.sort( list, new Comparator<Map.Entry<K, V>>()  
        {  
            public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 )  
            {  
                return (o1.getValue()).compareTo( o2.getValue() );  
            }  
        } );  
  
        Map<K, V> result = new LinkedHashMap<K, V>();  
        for (Map.Entry<K, V> entry : list)  
        {  
            result.put( entry.getKey(), entry.getValue() );  
        }

//map 里面的属性值需要替换成自己的 我这里用的key是String型 value 是实体类
  List<Map.Entry<String, CorrectRate>> list =
                new LinkedList<Map.Entry<String, CorrectRate>>(correctRateOm.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String, CorrectRate>>() {
            public int compare(Map.Entry<String, CorrectRate> o1, Map.Entry<String, CorrectRate> o2) {
                return (o1.getValue().getStudentId()).compareTo(o2.getValue().getStudentId());
            }
        });

list 返回的就是排好顺序的啦

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面试题
  • 实际遇到的问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档