java中TreeMap自定义排序以及一个键对应多个值问题

来源:互联网 发布:视频配音软件手机 编辑:程序博客网 时间:2024/04/29 09:39

原文转自:http://blog.163.com/xh_ding/blog/static/193903289201181103333431/ 

在最近写的一个工程里用到了TreeMap这个数据结构,TreeMap是SortedMap接口基于红黑树的实现,该类保证了映射按照升序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序进行排序,或者按照创建时所提供的比较器进行排序。插入该映射的所有键必须是可以相互比较的(实现Comparable接口),否则将抛出ClassCastException!

比如我创建一个TreeMap<Double,String>的结构要按照Double的降序排序(注意,默认的是按照升序排序的!)则可以这样写:
TreeMap<Double,String> rf = new TreeMap<Double,String>(new Comparator(){   @Override   public int compare(Object o1, Object o2) {    // TODO Auto-generated method stub    Double a = (Double)o1;    Double b = (Double)o2;    return -a.compareTo(b);   }});



如果想要一个键对应多个值则可以用一个list来存储value如:
TreeMap<Double,ArrayList<Integer>> rf = new TreeMap<Double,ArrayList<Integer>>();
向该TreeMap中放入数据<key,value>:
ArrayList<Integer> list = (ArrayList<Integer>) rf.get(key);//根据key得到存放value 的listif(list == null)list = new ArrayList<Integer>();list.add(value);rf.put(key,list);


如此便可以实现在TreeMap中一个key对应着多个value~~