比较器
比较有Comparator 和 Comparable
Comparable
Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。这个是直接作用于实体类上的
Comparator
Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。作用于一个排序类上
Comparable举例:
// 声明一个类并连接Comparable比较接口
public class Incom implements Comparable<Incom> {
private String name;
private int num;
public Incom(String name, int num) {//有参构造
this.name = name;
this.num = num;
}
@Override//重写toString方法
public String toString() {
return "Incom{" +
"name='" + name + '\'' +
", num=" + num +
'}';
}
@Override//对于Comparable接口的方法进行重写,相当于比较规则
public int compareTo(Incom o) {
return this.num-o.getNum();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
// 测试类中进行测试
public class Testin {
public static void main(String[] args) {
Incom i1 = new Incom("张三", 21);
Incom i2 = new Incom("李四", 25);
Incom i3 = new Incom("王五", 23);
Incom[] in = {i1,i2,i3};
Arrays.sort(in);//使用Arrays的方法进行比较,使用的是在之前类中对于Comparable接口重写的比较规则
System.out.println(Arrays.toString(in));
}
}
所得结果:
Comparator的举例
// 先写一个类
public class Out {
private String name;
private int num;
public Out(String name, int num) {
this.name = name;
this.num = num;
}
@Override
public String toString() {
return "Incom{" +
"name='" + name + '\'' +
", num=" + num +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
使用Comparator
// 再在另外的类中接入Comparator并重写方法
public class Outcom implements Comparator<Out> {
@Override
public int compare(Out o1, Out o2) {
return o1.getNum()-o2.getNum();
}
}
使用测试类进行测试
// 使用测试类进行测试
public class Testout {
public static void main(String[] args) {
Out i1 = new Out("张三", 21);
Out i2 = new Out("李四", 25);
Out i3 = new Out("王五", 23);
Out[] outs = {i1,i2,i3};
Arrays.sort(outs,new Outcom());//使用Arrays方法时要加上写好的比较规则
System.out.println(Arrays.toString(outs));
}
}
结果不变:
总结:
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。