Comparable接口:
java.lang.Comparable
自定义对象实现该接口重写compareTo方法:
public class Book implements Comparable<Book>{
public String name;
public double price;
public Book() {
}
public Book(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
@Override
public int compareTo(Book b) {
if(this.price > b.price){
return 1;
}else if (this.price < b.price){
return -1;
}else {
return this.name.compareTo(b.name);
}
//只比较price,可以直接 return Double.compare(this.price,b.price);
}
}
测试类主要代码:
@Test
public void test(){
Book[] books = new Book[4];
books[0] = new Book("a",10);
books[1] = new Book("bfgg",12);
books[2] = new Book("c",12);
books[3] = new Book("g",17);
Arrays.sort(books);
for (int i = 0; i <books.length ; i++) {
System.out.println(books[i]);
}
}
Comparator接口:
java.util.Comparator
可以实现java对象的排序(应用场景:购物网站按条件排序)
自定义类不用实现Comparable接口
测试类代码:
@Test
public void test(){
Book[] books = new Book[4];
books[0] = new Book("a",10);
books[1] = new Book("bfgg",12);
books[2] = new Book("c",12);
books[3] = new Book("g",17);
Arrays.sort(books, new Comparator<Book>() {
@Override
public int compare(Book o1, Book o2) {
if(o1.price > o2.price){
return -1;
}else if (o1.price < o2.price){
return 1;
}else {
return o1.name.compareTo(o2.name);
}
}
});
for (int i = 0; i <books.length ; i++) {
System.out.println(books[i]);
}
}
启发:
前台传入不同的排序条件,后台根据条件进行不同的排序,得到不同的对象数组,返回给前台,参考京东