[Java] HashMap sorting

HashMap(或是其他Map型態)是以<key, value>儲存的資料結構,
然而key的存放順序無法掌控,
若單純希望key可以按照順序排列可以使用TreeMap,雖然效率會較低,
但如果希望按照value的大小排列呢?

方法就是將Map的enrtySet取出存入List,
然後排列List裡的元素即可。

後續若希望將排序完的結果依然以Map方式儲存,
則將List依序存入LinkedHashMap

原始碼如下: (Reference: http://stackoverflow.com/questions/109383/sort-a-mapkey-value-by-values-java)

public static <K, V extends Comparable<? super V>> Map<K, V> 
    sortByValue( Map<K, V> map ) {
    
    List<Map.Entry<K, V>> list =
        new LinkedList<>( map.entrySet() );

    Collections.sort( list, new Comparator<Map.Entry<K, V>>() {
        @Override
        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<>();
    for (Map.Entry<K, V> entry : list) {
        result.put( entry.getKey(), entry.getValue() );
    }
    return result;
}

留言