Java的比较器-Comparable & Comparator

package Offer;

public class Goods implements Comparable{
    String name;
    double price;

    public Goods() {

    }

    public Goods(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

  //从大到小 @Override
public int compareTo(Object o) { if (o instanceof Goods) { Goods tmp = (Goods) o; if (this.price < tmp.price) { return 1; } else if (this.price > tmp.price) { return -1; } else { return 0; } } throw new RuntimeException("输入的类型不正确"); } }

 

package Offer;
import org.junit.Test;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;

public class Compare {
    //方法一:使用Comparable(自然排序)对自定义类实现按照price实现从大到小排序
    @Test
    public void test() {
        Goods[] goods = new Goods[5];

        goods[0] = new Goods("Huawei", 254);
        goods[1]  = new Goods("Alibaba", 542);
        goods[2]  = new Goods("Douyin", 425);
        goods[3] = new Goods("Tencent", 452);
        goods[4]  = new Goods("Xiaomi", 524);

        Arrays.sort(goods);

        System.out.println(Arrays.toString(goods));
    }

    //方法二:使用Comparator(定制排序)对自定义类实现按照price实现从小到大排序
    @Test
    public void test1() {
        Goods[] goods = new Goods[5];

        goods[0] = new Goods("Huawei", 254);
        goods[1]  = new Goods("Alibaba", 542);
        goods[2]  = new Goods("Douyin", 425);
        goods[3] = new Goods("Tencent", 452);
        goods[4]  = new Goods("Xiaomi", 524);

        Arrays.sort(goods, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Goods && o2 instanceof Goods) {
                    Goods tmp1 = (Goods) o1;
                    Goods tmp2 = (Goods) o2;

                    if (tmp1.price < tmp2.price) {
                        return -1;
                    } else if (tmp1.price > tmp2.price) {
                        return 1;
                    } else {
                        return 0;
                    }
                }
                throw new RuntimeException("输入的类型无法比较");
            }
        });
        System.out.println(Arrays.toString(goods));
    }
}

 

posted @ 2021-03-26 18:23  Peterxiazhen  阅读(41)  评论(0编辑  收藏  举报