您好:
請問,以下程式碼,如何用 值 來排序?
謝謝!
package a04b;import java.io.PrintStream;
import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;class TM
{
  public static void main(String[] args)
  {
    System.out.println("the main");
    
    Map<String, Integer> map = new TreeMap(new Comparator()
    {
      public int compare(Object o1, Object o2)
      {
        if ((o1 == null) || (o2 == null)) {
          return 0;
        }
        
        Collator collator = Collator.getInstance();
        
        CollationKey key1 = collator.getCollationKey(o1.toString());
        
        CollationKey key2 = collator.getCollationKey(o2.toString());
        
        System.out.println(o1 + "-->");
        System.out.println(o2);
        
        return key1.compareTo(key2);
        
      }
    });
    map.put("A", 3);
    map.put("D", 4);
    map.put("C", 1);
    
    System.out.println(((Integer)map.get("A")).intValue());
    
    System.out.println(map);
  }
}

解决方案 »

  1.   

    思路是,取出对应的值来按照你想要的规则进行排序。然后改变顺序就是了。
    这个集合的实现排序的话应该是使用类Collections的sort方法来实现,sort方法有两种:
    1.要排序的类实现Comparable接口来完成,这样才能正确使用这方法
    2.单独写个比较器器(单独写个类),实现Comparator接口。然后这个比较器作为两个参数的第二个参数去进行使用(实例化对象,new一个)
    然后就直接使用,不过你这是基本类型,应该不用。我只能告诉你可以这样,我自己无法具体写,因为看到你这个问题突然发现自己对集合的熟练度还有问题,于是打算去补补了
      

  2.   

    如果是根据value 直接使用Collections.sort就可以了,默认就是剩序。
    如果是根据key,也就是英文字母排序的话,也可以直接使用
    给一个我以前写的根据中文排序的public class SortChineseName implements Comparator<User> {
    Collator cmp = Collator.getInstance(java.util.Locale.CHINA); @Override
    public int compare(User o1, User o2) {
    if (cmp.compare(o1.getUid(), o2.getUid()) > 0) {
    return 1;
    } else if (cmp.compare(o1.getUid(), o2.getUid()) < 0) {
    return -1;
    }
    return 0;
    }
    }实现Comparator 接口。
      

  3.   

    您好:
    我有看過Collection.sort的方法
    但 我想用treemap 的compare來試試看
    不知是否有方法?
    謝謝!
      

  4.   

    有的,道理差不多 ,指定排序器
    然后实现compare方法即可。
    TreeMap<String, String> treeMap = new TreeMap<String, String>(
    new Comparator<String>() { @Override
    public int compare(String arg0, String arg1) {
    // TODO Auto-generated method stub
    return 0;
    } });
      

  5.   

    您好:
    若我用以下的程式碼,他只是要比 STRING ,這是比KEY, 若我想要 比的是 值而用 new Comparator<Integer>()  也無法COMPILER 過 TreeMap<String,Integer> map = new TreeMap<String,Integer >(
         new Comparator<String>() {     @Override
         public int compare(String arg0, String arg1) {
         // TODO Auto-generated method stub
         return ;
         }     }
        );
      

  6.   

    treemap貌似只能根据key排序,如果想要按value排序
    貌似要将EntrySet转换成list,然后使用Collections.sor排序。
    这是摘自百度。