Comparable 接口
一个类 实现Comparable 接口,重写里面的comparato方法,实现对类的自定义大小比较
有一个商品类 Goods, 内含两个私有成员变量 name 和 price。我们需要对商品按照价格进行降序排序。
可以让Goods 类实现Comparable 接口, 重写 compareTo 方法。
comparaTo 返回负数, 如果当前对象价格比另一个对象贵,返回0说明价格相等。返回正数,说明当前对象价格比另一个对象便宜。
public class Goods implements Comparable<Goods>{
private String name;// 商品名称
private double price;// 商品价格
public Goods(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
// 对商品进行降序排序
@Override
public int compareTo(Goods g) {
// 将当前对象与传入对象的成员属性进行比较
// 返回负数若this.成员 < arg.成员, 返回0若相等, 返回正数若this.成员>arg.成员
double price1 = this.getPrice();
double price2 = g.getPrice();
//因为是降序, 故取反
int n = new Double(price2 - price1).intValue();
return n;
}
@Override
public String toString() {
return "商品: " + name + ", 价格: " + price ;
}
}
我们可以测试一下
用两个 Goods 对象 调用 compareTo 函数比较商品价格
还可以将 多个 Goods 对象放进集合里面, 然后调用Collections.sort 函数进行排序。
public class GoodsTest {
public static void main(String[] args) {
Goods g1 =new Goods("手机",2000);
Goods g2 =new Goods("自行车",1000);
Goods g3 =new Goods("电脑",5000);
if (g1.compareTo(g2)<0){
System.out.println("手机比电脑贵");
}
List<Goods> goodsList= new ArrayList<>();
goodsList.add(g1);
goodsList.add(g2);
goodsList.add(g3);
// 对商品价格进行降序排序前,依次输出:手机,自行车,电脑
System.out.println("对商品价格进行降序排序前 : ");
for (Goods goods : goodsList) {
System.out.println(goods);
}
System.out.println();
// 对商品价格进行降序排序
Collections.sort(goodsList);
// 对商品价格进行降序排序后, 依次输出:电脑,手机,自行车
System.out.println("对商品价格进行降序排序后 : ");
for (Goods goods : goodsList) {
System.out.println(goods);
}
}
}
Last updated
Was this helpful?