Comparable 和 Comparator 的使用
import java.util.Arrays;
import java.util.Comparator;
class Good implements Comparable {
private double price; //价格
private String name; //名称
// 无惨的构造方法
public Good() {
}
// 带参的构造
public Good(double price, String name) {
this.price = price;
this.name = name;
}
// name属性的get方法
public String getName() {
return name;
}
//重写toString方法
@Override
public String toString() {
return "Good{" +
"price=" + price +
", name='" + name + '\'' +
'}';
}
//重写 Comparable 的compareTo方法 自然排序
@Override
public int compareTo(Object o) {
if (o instanceof Good) {
Good g = (Good) o;
if (this.price > g.price) {
return 1;
} else if (this.price < g.price) {
return -1;
} else {
return this.name.compareTo(g.name);
}
}
throw new RuntimeException("数据类型不正确!");
}
}
public class CompareDemo01 {
public static void main(String[] args) {
// Good类的对象数组
Good[] goods = {new Good(1800, "红米手机"), new Good(1399, "vivo手机"), new Good(2499, "华为手机")
, new Good(2199, "小米手机"), new Good(1399, "opoo手机")};
//打印原始数据
System.out.println("-- 原始顺序 -----------");
System.out.println(Arrays.toString(goods));
//打印排序后的数据 1
System.out.println("-- 价格、名称排序 compareTo-----------");
Arrays.sort(goods);
System.out.println(Arrays.toString(goods));
//打印排序后的数据 2
System.out.println("-- 名称排序 Comparator 定制排序-----------");
Arrays.sort(goods, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof Good && o2 instanceof Good) {
Good g1 = (Good) o1;
Good g2 = (Good) o2;
return g1.getName().compareTo(g2.getName());
}
return 0;
}
});
System.out.println(Arrays.toString(goods));
}
}