import java.util.*;public class Test {
  private static final int ONE = 1;
  public static void main(String[] args) {
    Map <String, Integer>m = new HashMap<String,Integer>();
    for (int i=0; i<args.length; i++) {
       if (!m.containsKey(args[i])) {
            m.put(args[i], ONE);
       } else {
            int freq = m.get(args[i]);
            m.put(args[i], freq + 1);
         }
       } 
       System.out.println(m.size() + "个单词被找到");
       System.out.println(m);
   }
}
输出的是每个单词出现的次数以及共几个单词,但是里面是无序的,怎么才能实现按出现次序从高到低排列呢?

解决方案 »

  1.   

    Arrays.sort(m.keySet().toArray());可行,但排列出来的是从低到高
    如果要从高到低,需要另外写一个Comparator,然后
    Arrays.sort(m.keySet().toArray(), comparator);
      

  2.   


    不好意思,对comparator不是很了解,麻烦说清楚一点
      

  3.   

    用comparator实现的降序排列的例子
    import java.util.*;public class Test {
    private static final int ONE = 1; public static void main(String[] args) {
    Map<String, Integer> m = new HashMap<String, Integer>();
    for (int i = 0; i < args.length; i++) {
    if (!m.containsKey(args[i])) {
    m.put(args[i], ONE);
    } else {
    int freq = m.get(args[i]);
    m.put(args[i], freq + 1);
    }
    }
    System.out.println(m.size() + "个单词被找到");


    Set<Map.Entry<String, Integer>> set = m.entrySet();
    Map.Entry<String,Integer>[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set
    .size()]);
    Arrays.sort(entries, new Comparator() {
    public int compare(Object arg0, Object arg1) {
    Long key1 = Long.valueOf(((Map.Entry) arg0).getValue()
    .toString());
    Long key2 = Long.valueOf(((Map.Entry) arg1).getValue()
    .toString());
    return key2.compareTo(key1);
    }
    });


    for (int i = 0; i < entries.length; i++) {
    System.out.println(entries[i]);
    }


    // System.out.println(m);

    }
    }
      

  4.   

    楼上都搞错了需求Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("a", 2);
    map.put("c", 2);
    map.put("b", 3);
    Map<Integer, String> sortMap = new HashMap<Integer, String>();
    for (Entry entry : map.entrySet()) {
    if (sortMap.containsKey((Integer) entry.getValue())) {
    String temp = entry.getKey() + ":" + entry.getValue();
    Integer thisKey = (Integer) entry.getValue();
    sortMap.put(thisKey, sortMap.get(thisKey) + "/" + temp);
    } else {
    sortMap.put((Integer) entry.getValue(), entry.getKey() + ":"
    + entry.getValue());
    }
    }
    Object[] o = sortMap.keySet().toArray();
    Arrays.sort(o);
    for (int i = o.length - 1; i >= 0; i--) {
    System.out.println(sortMap.get(o[i]));
    }