代码如下: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)这个样子如果要指定其他字段的话只能重新编译程序。
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)这个样子如果要指定其他字段的话只能重新编译程序。
解决方案 »
- java swing简繁体中文显示乱码问题
- 将字节正确地转换为字符问题
- 100分求SCJP 1.4(310-025,SL-275) 中文题库
- 求 好看的 swing 时间控件 , 能支持 yyyy-MM-dd HH:mm:ss 的最好
- 如何把database里的数据在AWT画面中显示?请举例?
- 好难的问题!!!!!!!
- 火急,火急
- java中如何将一个字符串转换成二进制形式,请高手帮忙看下我的代码,不知道错哪了!
- 请各位大侠帮我看看下面的线程有没有问题?谢谢
- 从文本文件中读取数据,用向数据库中写入中文什么会变为乱码??谢了!
- 各位帮忙啊,,在ECLIPSE中查找替换操作的问题
- 各位高手请帮我看看这段程序哪里写错了?
你会实现Comparable,也应该会写Comparator
在Collections.sort中带2个参数,一个是list,一个是Comparator
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 + "}";
}
}