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

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

给定一个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,算法的复杂度过大。

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

黄舟
黄舟

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

répondre à tous (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

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

      Peter_Zhu

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

        Derniers téléchargements
        Plus>
        effets Web
        Code source du site Web
        Matériel du site Web
        Modèle frontal
        À propos de nous Clause de non-responsabilité Sitemap
        Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!