java基础API-比较器

2024-04-03

方式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)


{/if}