java比较器--关于Comparable和Comparator的区别

关于Comparable和Comparator的区别
相同点:
1.两者都是接口。
2.两者的功能都是排序。
不同点:
1.Comparable在java.lang包下,Comparator在java.util包下
2.(a)实现Comparable接口要重写compareTo方法,
int compareTo(Object o)抽象方法
返回值说明:
比较此对象(this)与指定对象(形参o)的顺序。
如果该对象this小于(<)指定对象(形参o),就返回负整数
如果该对象this大于(>)指定对象(形参o),就返回正整数
如果该对象this等于(=)指定对象(形参o),就返回0

(b)实现Comparator接口要重写compare方法
int compare(Object o1, Object o2)

关于Comparable的具体实现方式如下:

//定义一个Product类来实现Comparable接口
public class Product implements Comparable<Product>{
    private String name;
    private int priceCents;

    public Product(String name, int priceCents) {
        this.name = name;
        this.priceCents = priceCents;
    }

    @Override
    public String toString() {
        return this.name + ": " + this.priceCents;
    }

    @Override
    public int compareTo(Product other) {
        if(this.priceCents>other.priceCents){
            return 1;
        } else if(this.priceCents< other.priceCents){
            return -1;
        }else {
            return 0;
        }
    }

    public static void main(String[] args) {
        Product p1=new Product("student1",300);
        Product p2=new Product("student2",200);
        Product p3=new Product("student3",300);
        //结果输出为1
        System.out.println(p1.compareTo(p2));
        //结果输出为0
        System.out.println(p1.compareTo(p3));
        //结果输出为-1
        System.out.println(p2.compareTo(p3));
    } }

关于Comparator的具体实现方式如下:

public class Product2 {
    private String name;
    private int priceCents;
    private int stockLevel;

    public Product2(String name, int priceCents, int stockLevel) {
        this.name = name;
        this.priceCents = priceCents;
        this.stockLevel = stockLevel;
    }

    @Override
    public String toString() {
        return this.name + ": " + this.stockLevel + " @ $" + this.priceCents / 100.0;
    }

    static class AlphabeticalComparator implements Comparator<Product2> {
        @Override
        public int compare(Product2 p1, Product2 p2) {
            return p1.name.compareTo(p2.name);
        }
    }

    static class PriceStockComparator implements Comparator<Product2> {
        @Override
        public int compare(Product2 p1, Product2 p2) {
            if (p1.stockLevel > 0 && p2.stockLevel == 0) {
                return -1;
            } else if (p1.stockLevel == 0 && p2.stockLevel > 0) {
                return 1;
            } else {
                if (p1.priceCents < p2.priceCents) {
                    return -1;
                } else if (p1.priceCents > p2.priceCents) {
                    return 1;
                } else {
                    return 0;
                }
            }
        }
    }

    public static void main(String[] args) {
        Product2 p1 = new Product2("cjl", 100, 200);
        Product2 p2 = new Product2("hs", 400, 100);
        AlphabeticalComparator a1 = new AlphabeticalComparator();
        //输出负整数,c比h小
        System.out.println(a1.compare(p1, p2));
        //输出负整数
        PriceStockComparator c1 = new PriceStockComparator();
        System.out.println(c1.compare(p1, p2));

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值