java 中HashMap排序

一、按key值排序
假设HashMap存储的键-值对为(String,Integer),按key排序可以调用JDK函数sort(默认的按字典升序):

    Set keySet = map.keySet();
    Collections.sort(keySet);

    for(Iterator ite = keySet.iterator(); ite.hasNext();) {
        String temp = ite.next();
        System.out.println("key-value: "+temp+","+map.getValue(temp);
    }
如果想要按字典的降序排列,则需改写sort方法里面的比较器Comparator:
   Collections.sort(keySet, new Comparator() {
        public int compare(Object o1, Object o2) {
           if(Integer.parseInt(o1.toString())>Integer.parseInt(o2.toString())
                return 1;
           if(Integer.parseInt(o1.toString())==Integer.parseInt(o2.toString())
               return 0;
            else
                return -1;
        }
    });
二、按value值排序
1)方法一:用两个list链表实现

    List keyList = new LinkedList();
    keyList.addAll(map.keySet());
    List valueList = new LinkedList();
    valueList.addAll(map.values());

    for(int i=0; i
       for(int j=i+1; j
          if(valueList.get(j)>valueList.get(i)) {
              valueList.set(j, valueList.get(i));
              valueList.set(i, valueList.get(j));
              //同样调整对应的key值
              keyList.set(j, keyList.get(i));
              keyList.set(i, kyeList.get(j));
          }
       }
然后依次把key值和对应value值重新装入HashMap即可。
2)方法二:改写JDK提供的Comparator接口方法compare

    List> list = new LinkedList>();
    list.addAll(map.entrySet());

    Collections.sort(list, new Comparator>() {
       public int compare(Map.Entry obj1, Map.Entry obj2) {//从高往低排序          
           if(Integer.parseInt(obj1.getValue().toString())
                     return 1;
          if(Integer.parseInt(obj1.getValue().toString())==Integer.parseInt(obj2.getValue().toString()))
                    return 0;
           else
                   return -1;
       }
    });
    for(Iterator> ite = list.iterator(); ite.hasNext();) {
         Map.Entry map = ite.next();
        System.out.println("key-value: " + map.getKey() + "," + map.getValue());
    }

posted @ 2015-04-18 18:42  杨博客  阅读(1925)  评论(0编辑  收藏  举报