方式1:实现Comparable接口
自然排序,实现Comparable接口的compareTo(Object o)方法,compareTo返回0表示相等,返回正数表示当前对象大,返回负数表示当前对象小
class Product implements Comparable {
private double price;
public Product(double price) {
this.price = price;
}
@Override
public int compareTo(Object o) {
if (o == this) {
return 0;
}
if (o instance Product) {
Product p = (Product) o;
return Double.compare(this.price, p.price);
}
throw new RuntimeException("");
}
}
// 排序
public void test() {
Product[] arr = new Product[3];
arr[0] = new Product(0.19);
arr[1] = new Product(0.10);
arr[2] = new Product(0.20);
Arrays.sort(arr);
for (int i = 0; i < arr.length(); i++) {
System.out.println(arr[i]);
}
}
// 比较对象大小
public void test() {
Product p1 = new Product(0.19);
Product p2 = new Product(0.10);
int compare = p1.compareTo(p2);
}
方式2:java.unit.Comparator定制排序
类没有实现Comparable接口,也不能修改源文件时使用
class Product {
private double price;
public Product(double price) {
this.price = price;
}
}
// 排序
public void test() {
Product[] arr = new Product[3];
arr[0] = new Product(0.19);
arr[1] = new Product(0.10);
arr[2] = new Product(0.20);
Comparator comparator = new Comparator() {
// 判断两个对象的大小,其标准就是此方法需要编写的逻辑,compare返回0表示相等,返回正数表示当前对象大,返回负数表示当前对象小
@Override
public int compare(Object o1, Object o2) {
if (o1 instance Product && o2 instance Product) {
Product p1 = (Product) o1;
Product p2 = (Product) o2;
return Double.compare(p1.price, p2.price);
}
throw new RuntimeException("");
}
};
Arrays.sort(arr, comparator);
for (int i = 0; i < arr.length(); i++) {
System.out.println(arr[i]);
}
}
两种方式比较
自然排序:单一、唯一;一劳永逸;对应的接口是Comparable,对应的抽象方法是compareTo(Obejct o)
定制排序:灵活、多样;临时编写;对应的接口是Comparator,对应的抽象方法是compare(Obejct o1, Obejct o2)