Java中比较器比较简单,我们就不过多的讲解,直接上代码来对比compareable 内部比较器和comparator 外部比较器。
内部比较器实现:
import lombok.AllArgsConstructor;
import lombok.Data;
/**
泛型代表比较的对象
同种类型的对象才具有比较能力
内部比较器:Comparable<Student>实现comapreTo方法
*/
@Data
@AllArgsConstructor
public class Student implements Comparable<Student>{
private String name;
private int age;
/**
* @return 返回值的的三种类型
* >0 本对象往后窜(移动)
* <0 位置不变
* =0 本对象往前窜(移动)
*
* @param o 参数:用于比较的对象
* 和本对象(this)比较
*/
@Override
public int compareTo(Student o) {
return this.age - o.age;//升序
}
}
外部比较器实现
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Student2{
private String name;
private int age;
}
import java.util.Comparator;
/**
* Student2外部比较器Comparator 实现compare
*/
public class MyCom implements Comparator<Student2> {
@Override
public int compare(Student2 o1, Student2 o2) {
return o1.getAge() - o2.getAge();
}
}
测试类:
import java.util.ArrayList;
import java.util.Collections;
/**
* 比较器的使用
* compareable 内部比较器
* 如果一个类实现了这个接口,代表这个类具备了比较的能力
* 实现compareTo
* comparator 外部比较器
* 专门定义一个比较器的类,类中去定义比较规则
* 实现compare
*/
public class testSort {
public static void main(String[] args) {
//1.string排序
/*ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("n");
list.add("v");
list.add("b");
list.add("c");
System.out.println(list);
Collections.sort(list);//排序
System.out.println(list);*/
//2.内部比较器
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("zs1",19));
list.add(new Student("zs2",29));
list.add(new Student("zs3",10));
list.add(new Student("zs4",23));
list.add(new Student("zs5",8));
System.out.println(list);
//只要调用排序的方法,必须具有排序的能力,否则无法编译通过
//解决方法:实现Comparable接口 ...ble使..具有..能力
Collections.sort(list);
System.out.println(list);
//3.外部比较器
ArrayList<Student2> list2 = new ArrayList<>();
list2.add(new Student2("zs1",19));
list2.add(new Student2("zs2",29));
list2.add(new Student2("zs3",10));
list2.add(new Student2("zs4",23));
list2.add(new Student2("zs5",8));
System.out.println(list2);
MyCom myCom = new MyCom();
Collections.sort(list2,myCom);
System.out.println(list2);
}
}
注意:因为引入了 lombok,所以maven中需要有lombok坐标
Maven pom.xml:
<dependencies>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
</dependencies>