2011-08-29 204 views

回答

10

A HashMap無法排序。如果您需要排序的密鑰,請查看TreeMap。爲了得到反轉命令你想要的,你就必須提供自定義Comparator

class ReversedOrdering implements Comparator<Integer> { 
    public int compare(Integer lhs, Integer rhs) { 
     // compare reversed 
     return rhs.compareTo(lhs); 
    } 
} 

編輯我只是碰到Collections.reverseOrder()偶然發現你想要的東西,它的作用:它給你一個Comparator能逆轉自然實施Comparable的對象排序。這可以節省您自己編寫比較器的麻煩。

+0

我意識到我的鑰匙不再是數字了。謝謝你的信息! – Maurice

+0

@Maurice:我已經添加了一個更簡單的解決方案來獲得自然排序的反向(鍵的類型無關緊要:如果實現「Comparable」,您可以通過這種方式反轉排序)。 –

0

HashMap不排序任何東西。如果您想保留排序的密碼,請使用TreeMap

0

嘗試下面的代碼,它工作正常,並根據訂購標記將排序升序或降序的反向排序的映射。

import java.util.Comparator; 
import java.util.Map; 
import java.util.TreeMap; 

/** 
* @author Rais.Alam 
* @date Dec 12, 2012 
*/ 
public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
     final boolean order = true; 
     try 
     { 

      Map<Integer, String> map = new TreeMap<Integer, String>(
        new Comparator<Integer>() 
        { 

         @Override 
         public int compare(Integer first, Integer second) 
         { 

          if (order) 
          { 

           return second.compareTo(first); 
          } 
          else 
          { 
           return first.compareTo(second); 

          } 
         } 
        }); 

      map.put(2, "v"); 
      map.put(3, "h"); 
      map.put(4, "e"); 
      map.put(1, "a"); 

      System.out.println(map); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

}