有一组数据,格式如下:
 词      词频
 你好     1
 问题     4
 数据     2
 详细     16
由于还要进行其他操作,我把它存储在Hashmap中,现在想按照词频的降序排序,也就是按照hashmap中的value降序排序。
要实现的结果为
  详细    16
  问题    4
  数据    2
  你好    1
请高手帮忙~~

解决方案 »

  1.   

    重写Integer的compareTo()方法吧。
      

  2.   

    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Iterator;
    public class HashMapSort {
    public static void main(String[] args) 
    {
    String[] arrayCu = {"你好","问题","数据","详细"}; //词语
    int[] arrayCp = {1,4,2,16};                    //出现对应的频率 
    HashMap<Integer,String> map = new HashMap<Integer, String>();
    for(int i=0,j=0;i<arrayCp.length&&j<arrayCu.length;i++,j++)
    {
    map.put(arrayCp[i],arrayCu[j]);  //添加到Map里
    }
    Iterator i = map.entrySet().iterator();
    System.out.println("=======输出词语以及对应的次数=======");
    while(i.hasNext())
    {
    System.out.println(i.next());
    }
    System.out.println("=======输出排序后的词语=======");
    Arrays.sort(arrayCp);     //数组排序
    for(int k=arrayCp.length-1;k>=0;k--)
    {
    System.out.println(map.get(arrayCp[k]));
    }
    }
    }
      

  3.   

    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Iterator;
    public class HashMapSort {
    public static void main(String[] args) 
    {
    String[] arrayCu = {"你好","问题","数据","详细"}; //词语
    int[] arrayCp = {1,4,2,16};                    //出现对应的频率 
    HashMap<Integer,String> map = new HashMap<Integer, String>();
    for(int i=0,j=0;i<arrayCp.length&&j<arrayCu.length;i++,j++)
    {
    map.put(arrayCp[i],arrayCu[j]);  //添加到Map里
    }
    Iterator i = map.entrySet().iterator();
    System.out.println("=======输出词语以及对应的次数=======");
    while(i.hasNext())
    {
    System.out.println(i.next());
    }
    System.out.println("=======输出排序后的词语=======");
    Arrays.sort(arrayCp);     //数组排序
    for(int k=arrayCp.length-1;k>=0;k--)
    {
    System.out.println(map.get(arrayCp[k]));
    }
    }
    }
    运行结果:
    =======输出词语以及对应的次数=======
    2=数据
    4=问题
    16=详细
    1=你好
    =======输出排序后的词语=======
    详细
    问题
    数据
    你好
      

  4.   

    我觉得可以不用HashMap,可以使用TreeMap,也可以使用HashMap的子类LinkedHashMap
    1如果使用TreeMap,定义一个Comparator的子类,排序要求如自己要求。
    2.如果使用HashMap的子类LinkedHashMap,使用其他方法排序,按照排序后的顺序放入LinkedHashMap中注:/**
     * 降序排序比较器
     * @author ping
     *
     */
    public class DescSortComparator implements Comparator { public int compare(Object o1, Object o2) {
    if(!(o1 instanceof String) || !(o2 instanceof String)){
    return 0;
    }
    String s1 = (String)o1;
    String s2 = (String) o2;
    int v1 = Integer.parseInt(s1);
    int v2 = Integer.parseInt(s2);

    return v2 - v1;
    }}
      

  5.   

    同意,hashmap本来就不是用来排序的,实在要用,只能自己重写个了