comparable 接⼝实际上是出⾃java.lang 包 它有⼀个 compareTo(Object obj) ⽅法⽤来排序comparator 接⼝实际上是出⾃ java.util 包它有⼀个compare(Object obj1, Objectobj2) ⽅法⽤来排序。
⼀般我们需要对⼀个集合使⽤⾃定义排序时,我们就要重写compareTo() ⽅法或compare() ⽅法,
当我们需要对某⼀个集合实现两种排序⽅式,⽐如⼀个 学生对象A中的成绩a要按照大小排序的话,我们可以重写compareTo() ⽅法和使⽤⾃制的Comparator ⽅法或者以两个 Comparator来实现歌名排序和歌星名排序,第⼆种代表我们只能使⽤两个参数版Collections.sort() .
compareTo是Comparable接口的方法
public interface Comparable{ public int compareTo(T o); }
compareTo方法用于比较两个对象的大小,一般写法
@Override
public int compareTo(A o) {
if (o.a==this.a) {
return 0;
}else {
return o.a>a?-1:1;
}
}
用途1:比较
如a.compareTO(b),a小于b返回-1,等于返回0,大于返回1。
用途2:排序public class A implements Comparable{
int a ;
public A(int a ){
this.a= a;
}
@Override
public int compareTo(A o) {
if (o.a==this.a) {
return 0;
}else {
return o.a>a?-1:1;
}
}
@Override
public String toString() {
return "A{" +
"a=" + a +
'}';
}
public static void main(String[] args) {
linkedList as = new linkedList<>();
as.add( new A(2546));
as.add( new A(8762));
as.add( new A(2324));
as.add( new A(3242));
as.add( new A(3242));
as.add( new A(322));
as.add( new A(4322));
as.add( new A(6782));
System.out.println("排序前:");
as.forEach(System.out::println);
Collections.sort(as);
System.out.println("排序后:");
as.forEach(System.out::println);
}
}
排序前:
A{a=2546}
A{a=8762}
A{a=2324}
A{a=3242}
A{a=3242}
A{a=322}
A{a=4322}
A{a=6782}
排序后:
A{a=322}
A{a=2324}
A{a=2546}
A{a=3242}
A{a=3242}
A{a=4322}
A{a=6782}
A{a=8762}
Process finished with exit code 0
compare
compare是Comparator的接口
public interface Comparator{ int compare(T o1, T o2); }
compare是Comparator的方法,用于集合的排序,但是用的时候需要实现compare方法
下面这种写法是lambda表达式方法,还可以用一个类实现接口的方法来实现
public class B{
int a;
public B(int a){
this.a = a;
}
@Override
public String toString() {
return "B{" +
"a=" + a +
'}';
}
public static void main(String[] args) {
linkedList bs = new linkedList<>();
bs.add( new B(3333));
bs.add( new B(2222));
bs.add( new B(1111));
bs.add( new B(4444));
System.out.println("排序前:");
bs.sort((s1, s2) -> s1.a > s2.a ? 1 :-1 );
System.out.println("排序后:");
bs.forEach(System.out::println);
}
}
排序前:
B{a=3333}
B{a=2222}
B{a=1111}
B{a=4444}
排序后:
B{a=1111}
B{a=2222}
B{a=3333}
B{a=4444}
Process finished with exit code 0



