Java比较类

Java中的对象,正常情况下,只能进行比较: ==或!=。不能使用>或< 但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。使用两个接口中的任何一个: Comparable 或Compare

Comparable

Comparable接口的使用举例:
1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象的方法
2.重写compareTo(obj)的规则:
如果当前对象this.大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。

public class test{
    public static void main(String[] args) {
        Goods[] arr = new Goods[4];
        arr[0] = new Goods("Huawei",23);
        arr[1] = new Goods("Xiaomi",22);
        arr[2] = new Goods("OPPO",23);
        arr[3] = new Goods("VIVO",24);
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));;
    }
}

class Goods implements Comparable{
    String name;
    int price;
    public Goods(String name,int price){
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "产品:"+ this.name + "价格:" + this.price;
    }


    @Override
    public int compareTo(Object o) {
        if (o instanceof Goods){
            if (this.price > ((Goods) o).price){
                return 1;
            }else if (this.price < ((Goods) o).price){
                return -1;
            }else{
                return this.name.compareTo(((Goods) o).name);
            }
        }
        throw new RuntimeException("请传入Goods对象");
    }
}

Comparator

当元素的类型没有实现java. Lang. Comparable接口而又不方便修改代码,或者实现了java. Lang. Comparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator 的对象来排序

重写compare(Object o1, Object o2)方法,比较o1和o2的大小:
如果方法返回正整数,则表示o1大于o2
如果返回0,表示相等
返回负整数,表示o1小于o2

public class test{
    public static void main(String[] args) {
        Goods[] arr = new Goods[4];
        arr[0] = new Goods("Huawei",23);
        arr[1] = new Goods("Xiaomi",22);
        arr[2] = new Goods("OPPO",23);
        arr[3] = new Goods("VIVO",24);
        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Goods g1 = (Goods)o1;
                Goods g2 = (Goods)o2;
                if (g1.price > g2.price){
                    return -1;
                }else if (g1.price < g2.price){
                    return 1;
                }else {
                    return 0;
                }
            }
        });
        System.out.println(Arrays.toString(arr));;
    }
}

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

    @Override
    public String toString() {
        return "产品:"+ this.name + "价格:" + this.price;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值