A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王璐 中级黑马   /  2012-6-22 14:46  /  5486 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王璐 于 2012-6-30 10:21 编辑

import java.util.*;
class  Print
{
public static void main(String[] args)
{
TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
tm.put('a',5);
tm.put('f',6);
tm.put('s',1);
tm.put('d',2);
System.out.println(tm);
}
}


如何将TreeMap集合中的元素按值进行排序输出,例如以上代码,将其输出为{1=s,2=d,5=a,6=f}??

5 个回复

倒序浏览
利用Collections里的Collections.sort方法,重写sort方法传入比较器
回复 使用道具 举报
List arrayList = new ArrayList(tm.entrySet());
Collections.sort(arrayList, new Comparator()
{
    public int compare(Object o1, Object o2)
   {
         Map.Entry obj1 = (Map.Entry) o1;
         Map.Entry obj2 = (Map.Entry) o2;
         return ((Integer)obj2.getValue()).compareTo((Integer) obj1 .getValue());
   }
});
System.out.println(arrayList);

用这个方法比较
回复 使用道具 举报
陈嘉宾 发表于 2012-6-22 14:57
利用Collections里的Collections.sort方法,重写sort方法传入比较器

Collections只能操作list集合,将TreeMap中的元素取出放到List集合,在排序,有没有简洁的方法,在Treemap集合中就能实现的?
回复 使用道具 举报
本帖最后由 oracleserver 于 2012-6-22 15:45 编辑

java.util.TreeMap 放入其中的value,自动按key进行排序, 默认的排序规则按ascii码排序,如果是key是英文和数字不会有问题,如果中文

则会出现问题,需要自己写排序规则。


比较器需要实现java.text.Collator类,例如:
  1. package cn.tjopen.mediaman.util;

  2. import java.text.CollationKey;
  3. import java.text.Collator;

  4. public class CollatorComparator extends Collator {
  5. private Collator collator = Collator.getInstance();
  6. private int sort=1;
  7. @Override
  8. public int compare(String arg0, String arg1) {
  9.   CollationKey key1 = collator.getCollationKey(arg0);
  10.      CollationKey key2 = collator.getCollationKey(arg1);
  11.      return sort*key1.compareTo(key2);
  12. }
  13. /**
  14.   * 设定排序的方向
  15.   * @param i 排序方向(正数:正序;负数:倒序)
  16.   */
  17. public void setSort(int i){
  18.   if(i>0){
  19.    sort=1;
  20.   }else if(i<0){
  21.    sort=-1;
  22.   }
  23. }
  24. public CollationKey getCollationKey(String arg0) {
  25.   return null;
  26. }
  27. public int hashCode() {
  28.   return 0;
  29. }

  30. }
复制代码
比较器的使用:

int sort = 1;//>0正序<0倒叙

CollatorComparator comparator = new CollatorComparator();
  comparator.setSort(sort);
  Map map = new TreeMap(comparator);

然后在把要排序的字段作为key,相应的信息作为对应的value,即可实现排序

注意:key值不能重复,如果排序字段有重复,则需要进行处理。

例如:方法一:在向map中存放数据时,先判断要放的key是否已存在,如果存在在当前值后面加一区分标记

方法二:如果信息中有不可能重复的字段,在排序字段后面加上这个不重复的字段值,把这个组合当做key
回复 使用道具 举报
我觉得只能用这种方法,传入list的集合自定比较方法。还算简洁吧。。。没几行的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马