代码如下:import java.util.*;public class TestSort {
    
    public static void main(String[] args) {
        sortComparable();
     }     public static void sortComparable() {        ArrayList list = new ArrayList();        list.add(new Programmer("Tony", "C", 12000));
        list.add(new Programmer("Mary", "Java", 200));
        list.add(new Programmer("Scorpio", "C++", 5000));
        list.add(new Programmer("Heathcliff", "VB", 3000));        System.out.println("before sort: " + list);
        Collections.sort(list);
        System.out.println("after sort: " + list);
     }
 } class Programmer implements Comparable{     private String name;
     private String language;
     private double pay;     public Programmer(String name, String language, double pay) {
        this.name = name;
        this.language = language;
        this.pay = pay;
     }     public int compareTo(Object o) {
        Programmer other = (Programmer)o;
        int comp = name.compareTo(other.name);
        return comp;
     }     public String toString(){
        return "{name: " + name + ", language: " + language + ", money: " + pay + "}";
     }
}
问题是,能否在main方法中动态的指定对哪个字段的比较?int comp = name.compareTo(other.name)这个样子如果要指定其他字段的话只能重新编译程序。

解决方案 »

  1.   

    用比较器,java.util.Comparator
    你会实现Comparable,也应该会写Comparator
    在Collections.sort中带2个参数,一个是list,一个是Comparator
      

  2.   


    import java.util.*;
    public class TestSort {
        
        public static void main(String[] args) {
            sortComparable("name");
         }     public static void sortComparable(String flag) {        ArrayList list = new ArrayList();        list.add(new Programmer("Tony", "C", 12000));
            list.add(new Programmer("Mary", "Java", 200));
            list.add(new Programmer("Scorpio", "C++", 5000));
            list.add(new Programmer("Heathcliff", "VB", 3000));
            
            System.out.println("before sort: " + list);
            Collections.sort(list,new ProCompor(flag));
            System.out.println("after sort: " + list);
         }
     }
    class ProCompor implements Comparator{
        private String name;
        private String language;
        private double pay;
        private String flag;
        public ProCompor(String _flag){
            this.flag=_flag;
        }
        public int compare(Object o1, Object o2) {   
            Programmer fir=(Programmer)o1;
            Programmer sec=(Programmer)o2;
            if("pay".equals(flag))
                return Double.compare(fir.getPay(),sec.getPay());
            else if("language".equals(flag))
                return fir.getLanguage().compareTo(sec.getLanguage());
            else
                return fir.getName().compareTo(sec.getName());
                
        }
        
    } class Programmer{     private String name;
         private String language;
         private double pay;
         public Programmer(String name, String language, double pay) {
            this.name = name;
            this.language = language;
            this.pay = pay;
         }
         public String getName(){
             return name;
         }
         public String getLanguage(){
             return language;
         }
         public double getPay(){
             return pay;
         }
         public String toString(){
            return "{name: " + name + ", language: " + language + ", money: " + pay + "}";
         }
    }