2014-10-01 49 views
0

打印HashMap中我得到了与下面的输出java的HashMap中,当我使用toString()如何排序,并在Java

{to=3, but=2, said=1, hid=1, Newton=6, by=1, eyes=2, of=2, meter=3, hide=1, his=1, on=1, drew=1, Einstein=5,......}

我的HashMap的语法如下:<String, Integer>

现在我想这样排序:

6: Newton 
    6: and 
    5: Einstein 
    3: Pascal 
    3: found 
    3: meter 
    3: one 
    3: to 
    2: a , .... 

这意味着我必须按整数值排序。产出的“风格”也应该如上所述。任何人都可以帮助我,请明天参加考试:D

回答

2

看起来好像你想按照它的值对地图进行排序。我不认为有这样的地图实现。 TreeMap维护键排序,但这不会帮助你。因此,您必须编写自己的方法来获取地图条目(使用entrySet()),按照值(以及相同值的键)对它们进行排序,然后按照您的喜好打印它们。

1

通常,“对HashMap进行排序”的方法是将键,值或条目集合复制到数组中,然后对数组进行排序;例如使用的Arrays.sort方法之一

在你的情况,你想提取由HashMap.entrySet()方法提供的搜集,使用Comparator该号令Map<K,V>.Entry对象的值,然后按键。

打印排序条目的简单方法是使用循环。 (我不认为Arrays.toString是适用的,因为Map实现通常不会覆盖Object.toString方法。至少,javadoc不会这样说...)

0

只需将您的准备好的映射简单实现即可。 。!

Set<Entry<String,Integer>> s=yourmap.entrySet(); 
    List<Entry<String,Integer>> l=new ArrayList<Entry<String,Integer>>(s); 
    Collections.sort(l,new Comparator<Map.Entry<String, Integer>>() { 

     @Override 
     public int compare(Entry<String, Integer> arg0, 
       Entry<String, Integer> arg1) { 

      return (arg1.getValue().compareTo(arg0.getValue())); 
     } 

    }); 


    for(Map.Entry<String, Integer> entry:l){ 
     System.out.println("Key== "+entry.getKey()+" value= in Increasing Order=="+entry.getValue()); 
    } 

我希望这会满足您的要求

0

我们无法实现排序上的任一按键或值的HashMap中。

java只提供使用它的键对值进行排序。在java中,我们可以使用TreeMap对MAP的键进行排序。

TreeMap只提供对键进行分类的工具。