TreeMap<string,MyClass> 这个是我的TreeMap
MyClass里头有个int score 的类属性
MyClass{
    int score;
    string word;
}我想按照MyClass的score 把这个TreeMap排序 请问怎么做呢

解决方案 »

  1.   

    比较直接也是笨拙的方法是:set<MyClass> valueSet=treeMap.values();
    for(int i=0;i<valueSet.size();i++)
    {
      for(int j=i+1;j<valueSet.size();j++O)
      {
         MyClass mc=null;
         if(valueSet[i.score<valueSet[j].score)
           {
              mc=valueSet[j];
              valueSet[j]=valueSet[i];
              valueSet[i]=mc;
            }
      }
    }
    建议最好把TreeMap<string,MyClass>改为TreeMap<Integer,MyClass>,其中key就存score字段,这样treeMap存入时就会排好序。
      

  2.   

    改成TreeMap<MyClass,String>。让MyClass实现Comparable,或者提供一个Comparator
      

  3.   

    自定义Comparator,手机上网不好写代码,见谅
      

  4.   

    让MyClass实现Comparable覆写comparaTo方法指定排序规则。
    @Override
    public int compareTo(MyClass myClass) {
    if(this.score>myClass.score){
    return 1 ;
    } else if(this.score<myClass.score){
    return -1 ;
    } else {
    return this.word.compareTo(myClass.word) ;
    }
    }
    或者自己定义一个比较器
    public class MyClassComparator implements Comparator<MyClass>{
    @Override
    public int compare(MyClass m1, MyClass m2) {
    if(m1.getScore()>m2.getScore()){
    return 1; 
    } else if(m1.getScore()<m2.getScore()) {
    return -1 ;
    } else {
    return m1.getWord().compareTo(m2.getWord()) ;
    }
    }

    TreeMap<MyClass,String>
      

  5.   

    自己定义一个比较器
    Java codepublic class MyClassComparator implements Comparator<MyClass>{
        @Override
        public int compare(MyClass m1, MyClass m2) {
            if(m1.getScore()>m2.getScore()){
                return 1; 
            } else if(m1.getScore()<m2.getScore()) {
                return -1 ;
            } else {
                return m1.getWord().compareTo(m2.getWord()) ;
            }
        }

      

  6.   

    楼主没有理解什么是MAP,TreeMap是按照Key来排序的。
    楼主不妨使用TreeSet,这样,Set里面的元素,就可以直接排序存储。
    当然,要重写compare方法,或者,写一个比较器。
      

  7.   

    @Override
        public int compareTo(MyClass myClass) {
            if(this.score>myClass.score){
                return 1 ;
            } else if(this.score<myClass.score){
                return -1 ;
            } else {
                return this.word.compareTo(myClass.word) ;
            }
        }