java - 【算法】HashMap按照value排序
黄舟
黄舟 2017-04-18 10:52:16
0
3
722

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

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

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

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

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

reply all (3)
黄舟
List> list = new LinkedList>( map.entrySet() ); Collections.sort( list, new Comparator>() { public int compare( Map.Entry o1, Map.Entry o2 ) { return (o1.getValue()).compareTo( o2.getValue() ); } } ); Map result = new LinkedHashMap(); for (Map.Entry entry : list) { result.put( entry.getKey(), entry.getValue() ); }
    Ty80

    Why should we put Values in List? Wouldn't it be much simpler to put Entry directly?

      Peter_Zhu

      Passing by~Passing by~Passing by~Passing by~Passing by~Passing by~Passing by~Passing by~Passing by~

        Latest Downloads
        More>
        Web Effects
        Website Source Code
        Website Materials
        Front End Template
        About us Disclaimer Sitemap
        php.cn:Public welfare online PHP training,Help PHP learners grow quickly!