【算法】HashMap按照value排序

发布于 2022-09-04 17:55:04 字数 924 浏览 10 评论 0

阿里面试的时候面试官提出的一个问题:

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

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

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

针对这个问题,各位同学有什么更好的解法,麻烦提供一下思路。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一杯敬自由 2022-09-11 17:55:04
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() );  
        }
终难愈 2022-09-11 17:55:04

为什么要把Values放到List里呢?直接放Entry不就简单很多了吗。

绝不服输 2022-09-11 17:55:04

路过~路过~路过~路过~路过~路过~路过~路过~路过~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文