package util; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class SortableValueMap extends LinkedHashMap { public SortableValueMap() { } public SortableValueMap( Map map ) { super( map ); } public void sortByValue() { List> list = new LinkedList>( entrySet() ); Collections.sort( list, new Comparator() { public int compare( Map.Entry entry1, Map.Entry entry2 ) { return ((Comparable)entry1.getValue()).compareTo( entry2.getValue() ); } }); clear(); for( Map.Entry entry : list ) { put( entry.getKey(), entry.getValue() ); } } private static void print( String text, Map map ) { System.out.println( text ); for( String key : map.keySet() ) { System.out.println( "key/value: " + key + "/" + map.get( key ) ); } } public static void main(String[] args) { SortableValueMap map = new SortableValueMap(); map.put( "A", 67.5 ); map.put( "B", 99.5 ); map.put( "C", 82.4 ); map.put( "D", 42.0 ); print( "Unsorted map", map ); map.sortByValue(); print( "Sorted map", map ); } }