HashMap(或是其他Map型態)是以<key, value>儲存的資料結構,
然而key的存放順序無法掌控,
若單純希望key可以按照順序排列可以使用TreeMap,雖然效率會較低,
但如果希望按照value的大小排列呢?
方法就是將Map的enrtySet取出存入List,
但如果希望按照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;
}
留言
張貼留言