开发过程中,会遇到 对一个对象的序列进行排序。
java里面提供了Comparable、Comparator 接口
Comparable : public int compareTo(T o);
Comparator : int compareTo(T o1,T o2);
例子:
现在有一个类,有姓名、年龄两个属性,要求根据年龄排序
package cu.suning.min.demo.compareable;
import java.util.Comparator;
/**Comparable,数组排序
* Comparator,list排序
* @author 14051387
*
*/
public class CompDemo implements Comparable<CompDemo> , Comparator<Object>{
public String name;
public int age;
public CompDemo(){}
public CompDemo(String name,int age){
this.name = name;
this.age = age;
}
// 数组排序
@Override
public int compareTo(CompDemo o) {
if(this.age < o.getAge()){
return -1;
}else if(this.age > o.getAge()){
return 1;
}
return 0;
}
// list排序用
@Override
public int compare(Object o1, Object o2) {
CompDemo com1 = (CompDemo)o1;
CompDemo com2 = (CompDemo)o2;
if(com1.getAge() < com2.getAge()){
return -1;
}else if(com1.getAge() > com2.getAge()){
return 1;
}
return 0;
}
public String toString(){
return this.name+" , "+this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
测试:
package cu.suning.min.demo.compareable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class JmainTest {
/**
* @param args
*/
public static void main(String[] args) {
CompDemo []com = new CompDemo[3];
com[0] = new CompDemo("A", 47);
com[1] = new CompDemo("B", 48);
com[2] = new CompDemo("C", 45);
List<CompDemo> lst = new ArrayList<CompDemo>();
CompDemo comD = new CompDemo();
for(CompDemo co : com){
lst.add(co);
}
//******************************
System.out.println("lst排序前:");
System.out.println(lst);
Collections.sort(lst, comD);
System.out.println("lst排序后:");
System.out.println(lst);
// ***********************
Arrays.sort(com);
for(CompDemo co : com){
System.out.println("排序后的数组:");
System.out.println(co);
}
}
}