2017-03-15 58 views
-4

設定值如何排序的通用哈希映射字符串和整數,在Java中的設定值:如何排序的通用哈希映射字符串和整數在Java

這裏是這個答案,但是需要figureout一個優化的方式。

HashMap<String,Integer> hash = new HashMap<String,Integer>(); 
    hash.put("king", 2); 
    hash.put("Queen", 3); 
    hash.put("Pawn", 1); 
    hash.put("Minister", 7); 
    hash.put("Horse", 6); 

    List<Map.Entry<String,Integer>> list = 
      new LinkedList<Map.Entry<String,Integer>>(hash.entrySet()); 

    Collections.sort(list, new Comparator<Map.Entry<String,Integer>>() { 
     public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2) 
      { 
       return (o1.getValue()).compareTo(o2.getValue()); 
      } 
    }); 

    Map<String,Integer> result = new LinkedHashMap<String,Integer>(); 

    for (Map.Entry<String,Integer> entry : list) 
     { 
      System.out.println(entry.getKey()+" === "+entry.getValue()); 
     }  
+1

優化了什麼意義? – azurefrog

+0

這是http://codereview.stackexchange.com/的問題嗎? – tnw

+0

瞭解此數據結構的用途以及哪些用例需要優化將會有所幫助。這可能是不同的數據結構更適合您的需求。 –

回答

0

如果我理解你的問題,沒有太多的優化,除了改變你的集合爲一個有序的而不是一個HashMap。

你的代碼是不是真的壞,複雜性是的n log(n)的致Collections.sort()

否則的順序,你有,你可以通過不創建一個新的集合,並與開始避免步有序收藏。 List<Map.Entry<String,Integer>> list = LinkedList<Map.Entry<String,Integer>>(hash.entrySet());

+0

如果通過「有序集合」來表示SortedMap,那就行不通了。他希望條目按值排序(而不是按鍵)。 –