sorting a map on the basis of key and value
本问题已经有最佳答案,请猛点这里访问。
我开发了下面的代码,我们可以根据键和值对
主要的逻辑是,我们可以对
我的问题是,如果你校准,请建议我其他更好的方法或任何改进,你们可以建议。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | public class MapSortingExample { public static void main(String args[]) { //creating Hashtable for sorting Map<String, Integer> olympic2012 = new HashMap<String, Integer>(); olympic2012.put("England", 3); olympic2012.put("USA", 1); olympic2012.put("China", 2); olympic2012.put("Russia", 4); //olympic2012.put("Australia", 4); //adding duplicate value //printing hashtable without sorting System.out.println("Unsorted Map in Java :" + olympic2012); //sorting Map e.g. HashMap, Hashtable by keys in Java Map<String, Integer> sorted = sortByKeys(olympic2012); System.out.println("Sorted Map in Java by key:" + sorted); //sorting Map like Hashtable and HashMap by values in Java sorted = sortByValues(olympic2012); System.out.println("Sorted Map in Java by values:" + sorted); //Sorting Map in Java by keys using TreeMap Map<String, Integer> sortedMapByKeys = new TreeMap<String,Integer>(); sortedMapByKeys.putAll(olympic2012); System.out.println("Sorted Map in Java by key using TreeMap :" + sortedMapByKeys); //Sorting Map by keys in Java using Google Collections (Guava) //Main benefit is you can specify any ordering like natural or toString or arbitrary Map<String, Integer> sortingUsingGuava = Maps.newTreeMap(Ordering.natural()); sortingUsingGuava.putAll(olympic2012); System.out.println("Example to sort Map in Java using Guava :" + sortingUsingGuava); } /* * Paramterized method to sort Map e.g. HashMap or Hashtable in Java * throw NullPointerException if Map contains null key */ public static <K extends Comparable,V extends Comparable> Map<K,V> sortByKeys(Map<K,V> map){ List<K> keys = new LinkedList<K>(map.keySet()); Collections.sort(keys); //LinkedHashMap will keep the keys in the order they are inserted //which is currently sorted on natural ordering Map<K,V> sortedMap = new LinkedHashMap<K,V>(); for(K key: keys){ sortedMap.put(key, map.get(key)); } return sortedMap; } /* * Java method to sort Map in Java by value e.g. HashMap or Hashtable * throw NullPointerException if Map contains null values * It also sort values even if they are duplicates */ public static <K extends Comparable,V extends Comparable> Map<K,V> sortByValues(Map<K,V> map){ List<Map.Entry<K,V>> entries = new LinkedList<Map.Entry<K,V>>(map.entrySet()); Collections.sort(entries, new Comparator<Map.Entry<K,V>>() { @Override public int compare(Entry<K, V> o1, Entry<K, V> o2) { return o1.getValue().compareTo(o2.getValue()); } }); //LinkedHashMap will keep the keys in the order they are inserted //which is currently sorted on natural ordering Map<K,V> sortedMap = new LinkedHashMap<K,V>(); for(Map.Entry<K,V> entry: entries){ sortedMap.put(entry.getKey(), entry.getValue()); } return sortedMap; } } |
输出将是..
1 2 3 4 5 | Unsorted Map in Java : {USA=1, England=3, Russia=4, China=2} Sorted Map in Java by key: {China=2, England=3, Russia=4, USA=1} Sorted Map in Java by values: {USA=1, China=2, England=3, Russia=4} Sorted Map in Java by key using TreeMap : {China=2, England=3, Russia=4, USA=1} Example to sort Map in Java using Guava : {China=2, England=3, Russia=4, USA=1} |
号
更好的方法是将