JAVA集合类用Comparator,Comparable,compareTo实现自定义类的sort函数
集合类可以直接用Collections.sort(List list),其前提是集合中存放的是可直接排序的基本类型,如int, double,如果是其他类型或者是自定义的类型就需要自己实现比较函数。下面介绍里实现的几种方式。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class MyComparator implements Comparable<MyComparator> {
public String name;
public int age;
MyComparator(String name,int age){
this.name=name;
this.age=age;
}
//实现在控制台显示
public String toString(){
return new String("name "+this.name+" age "+this.age);
}
@Override
//实现接口Comparable中的比较函数,即方法一的比较函数
public int compareTo(MyComparator o2){
//return o2.age-this.age;按照年龄从大到小
return this.age-o2.age;//按照年龄从小到大
//这里的this就相当于其他比较函数的第一个参数,即o1
}
public static void main(String[]args){
String a="aksfkjbsksvvscfjfban";
//方法一,自定义类实现Comparable接口实现排序函数。
ArrayList<MyComparator> myComparatorArrayList=new ArrayList<>();
for (int i = 0; i <a.length() ; i++) {
myComparatorArrayList.add(new MyComparator(a.substring(i,(a.length()-i>i)?a.length()-i:a.length()),a.length()-i));
}
System.out.println(myComparatorArrayList);
Collections.sort(myComparatorArrayList);
System.out.println(myComparatorArrayList);
//方法二,创建一个Comparator<MyComparator>对象 mycompar
Comparator<MyComparator> mycompar=new Comparator<>() {
@Override
/**
* 该方法用来定义o1和o2的比较规则
* 若返回值>0:o1>o2
* 若返回值<0:o1<o2
* 若返回值=0:两个对象相等
* sort后结果是从小到大排序
*/
public int compare(MyComparator o1, MyComparator o2) {
return o1.name.length()-o2.name.length();
}
};
myComparatorArrayList.sort(mycompar);
System.out.println(myComparatorArrayList);
//方法三,和方法二一样
myComparatorArrayList.sort(new Comparator<MyComparator>() {
@Override
public int compare(MyComparator o1, MyComparator o2) {
return o2.name.length()-o1.name.length();
}
});
System.out.println(myComparatorArrayList);
//方法四,定义一个比较类
class myComparator implements Comparator<MyComparator>{
public int compare(MyComparator o1,MyComparator o2){
return o1.name.length()-o2.name.length();
}
}
Collections.sort(myComparatorArrayList,new myComparator());
System.out.println(myComparatorArrayList);
}
}