JAVA - 比较器 代码示例

这篇博客详细介绍了Java中Comparable和Comparator接口的使用。首先,展示了如何使Good类实现Comparable接口进行自然排序,主要依据价格和名称。然后,通过创建自定义Comparator实现了按名称排序的功能。示例代码中,创建了Good对象数组并进行了排序演示,输出了排序前后的结果。
摘要由CSDN通过智能技术生成
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));
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值