使用Comparator比较接口实现排序
- Comparator是比较接口,当我们需要对某个类进行排序而此类本身没有时Comparable时,我们可以建立一个该类的比较器来实现Comparator接口即可实现排序。
Comparator接口定义如下
public interface Comparator<T>{
int compara(T o1 ,T o2);
boolean equals(Object obj);
}
备注:若实现Comparator接口,必须实现compara(T o1,To2)函数,但可以不实现equals函数。
例子:
- 我们定义一个“person”类
public class person {
private String name; //姓名
private int age; //年纪
//构造函数
public person(String get_name , int get_age) {
this.name = get_name;
this.age = get_age;
}
public int get_age() {
return this.age;
}
public String get_name() {
return this.name;
}
}
- 创建按年龄排序的比较器实现Comparator接口
//创建根据年龄排序的比较器
public class compare_byAge implements Comparator<person> {
//重写compare方法
@Override
//此处为按年龄升序排序
public int compare(person o1, person o2) {
if(o1.get_age() > o2.get_age() ) {
return 1;
}
else if(o1.get_age() == o2.get_age()) {
return 0;
}
else {
return -1;
}
}
}
- 使用ArrayList进行排序测试
public class test {
public static void main(String[] args) {
//创建person对象
person p1 = new person("li",15);
person p2 = new person("ping",18);
person p3 = new person("liao",13);
person p4 = new person("long",23);
person p5 = new person("xu",12);
//创建peson类的ArrayList集合
ArrayList<person> per = new ArrayList<person>();
//将实例化的person对象加入到ArrayList集合中
per.add(p1);
per.add(p2);
per.add(p3);
per.add(p4);
per.add(p5);
//排序前的顺序(其实就是按照插入顺序)
System.out.println("排序前:");
for(int i =0;i<per.size();i++) {
System.out.println(per.get(i).get_age()+" "+per.get(i).get_name());
}
System.out.println();
//用Collection.sort()排序
Collections.sort(per,new compare_byAge());
System.out.println("排序后:");
for(int i =0;i<per.size();i++) {
System.out.println(per.get(i).get_age()+" "+per.get(i).get_name());
}
}
}
输出结果:
- 以名字长度排序的Comparator比较器
//设置以名字长度为判断标准的比较器
public class compare_bynameLen implements Comparator<person> {
public int compare(person o1, person o2) {
//按名字长度升序排序
if(o1.get_name().length() > o2.get_name().length()) {
return 1;
}
//名字长度相同的情况下按照年龄升序排序
else if( o1.get_name().length() == o2.get_name().length() ) {
if(o1.get_age() > o2.get_age() ) {
return 1;
}
else if(o1.get_age() == o2.get_age()) {
return 0;
}
else {
return -1;
}
}
else {
return -1;
}
}
}
运行结果为:
以上:如有错误,谢谢指出哦