1. Comparable 接口
是一个“内比较器”,里面就一个接口public int compareTo(T o);
实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。compareTo方法的返回值是int,有三种排序方式:
升序(this.o > o; return 1;)
降序(this.o < o; return -1;)
默认数组顺序 (this.o == o; return 0;)
1.1 代码
public class Book implements Comparable<Book>{
private String name;
private int price;
public Book(String name,int price){
this.name=name;
this.price=price;
}
get set
....
@Override
public String toString() {
return "Book [name=" + name + ", price=" + price + "]";
}
@Override
public int compareTo(Book o) {
if(this.price>o.getPrice()) {
return 1;//升序
}else if(this.price<o.getPrice()){
return -1;//降序
}
return 0;//正常排序
}
public static void main (String arg[]) {
Book list[]= {
new Book("java",10),
new Book("C#",20),
new Book("C++",30),
new Book("CSS",11)};
System.out.println("排序前:");
for(Book b:list) {
System.out.println(b.getName()+"\t\t"+b.getPrice());
}
Arrays.sort(list);
System.out.println();
System.out.println("排序后:");
for(Book b:list) {
System.out.println(b.getName()+"\t\t"+b.getPrice());
}
}
}
排序前: | 排序前: | 排序后: | 排序后: |
---|---|---|---|
java | 10 | java | 10 |
C# | 20 | CSS | 11 |
C++ | 30 | C# | 20 |
CSS | 11 | C++ | 30 |
2. Comparator 接口
Comparator可以认为是是一个“外比较器”,个人认为有三种情况可以使用实现Comparator接口的方式:
一个对象不支持自己和自己比较(没有实现Comparable接口),但是又想对两个对象进行比较
一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己想要的那种比较方式
一个Integer数组需要降序时,这时候就需要Comparator定制接口了,因为Integer默认实现了Comparable并且是排序为自然排序
Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和Comparable接口一样是int,有三种排序方式:
升序(o1 > o2; return 1;)
降序(o1 < o2; return -1;)
默认数组顺序 (o1 == o2; return 0;)
2.1代码
public class Comparators<T> implements Comparator<T>{
@Override
public int compare(T o1, T o2) {
if(o1 instanceof Integer && o2 instanceof Integer) {
Integer int1=(Integer)o1;
Integer int2=(Integer)o2;
if(int2>int1) {
return 1;
}else if(int2<int1) {
return -1;
}
}
return 0;
}
public static void main (String arg[]) {
Integer it[]= {1,24,4,12,45,134,64,2};
System.out.println("排序前:");
System.out.println(Arrays.toString(it));
Arrays.sort(it);
System.out.println("自然排序:");
System.out.println(Arrays.toString(it));
Arrays.asList(it);
System.out.println("降序后:");
Arrays.sort(it, new Comparators<Integer>());
System.out.println(Arrays.toString(it));
}
}
排序前: | 自然排序: | 降序后: |
---|---|---|
[1, 24, 4, 12, 45, 134, 64, 2] | [1, 2, 4, 12, 24, 45, 64, 134] | [134, 64, 45, 24, 12, 4, 2, 1] |
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章