文章目录
Comparable
/**
* Comparable实现自然排序
*/
class Product implements Comparable<Product> {
private double price;
private String name;
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 当前的类 需要实现compareTo方法
* 指明 如何判断当前类的对象大小
* 比如:按照价格的高低进行比较大小(从大到小),价格相同,按照名字排序(从小到大)
*
* @param o the object to be compared.
* @return
*/
@Override
public int compareTo(Product o) {
if (o == this) return 0;
/**
* 如果 正数,当前对象大
* 如果 负数,当前对象小
* 如果 0,一样大
*/
int compare = Double.compare (this.price, o.price);
// 默认升序,加 -号,表示降序
if (compare != 0) return -compare;
return this.name.compareTo (o.name);
}
}
Comparator
实体类
class Product {
private double price;
private String name;
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
定制化排序
Comparator<Product> comparator = new Comparator<Product> () {
@Override
public int compare(Product o1, Product o2) {
int compare = Double.compare (o1.getPrice (), o2.getPrice ());
/**
* 如果 正数,当前对象大
* 如果 负数,当前对象小
* 如果 0,一样大
*/
// 按照价格的高低进行比较大小(从大到小),价格相同,按照名字排序(从小到大)
if (compare != 0) return -compare;
return o1.getName ().compareTo (o2.getName ());
}
};
ArrayList<Product> products = new ArrayList<> ();
Arrays.sort (products.toArray (new Product[0]), comparator);