Java,比较器

自然排序:Comparable接口

  • compareTo(Object o)方法
    • 在此方法中指明如何判断当前类的对象大小。
  • 具体步骤:
    • 具体的A类实现Comparable接口
    • 重写Comparable接口中的compareTo(Object o)方法,在此方法中指明比较类A的对象的大小标准
    • 创建类A的多个实例,进行大小比较和排序
java 复制代码
//    @Override
//    public int compareTo(Object o)
//    {
//        if(o == this)
//        {
//            return 0;
//        }
//
//        if(o instanceof Product)
//        {
//            Product p = (Product) o;
//            return Double.compare(this.price,p.price);
//        }
//
//        throw new RuntimeException("类型不匹配");
//    }

    @Override
    public int compareTo(Object o)
    {
        if(o == this)
        {
            return 0;
        }

        if(o instanceof Product)
        {
            Product p = (Product) o;
            int value = Double.compare(this.price,p.price);
            if(value !=0 )
            {
                return value;
            }

            return this.name.compareTo(p.name);
        }

        throw new RuntimeException("类型不匹配");
    }

定制排序:Comparator接口

  • compare(Object o1, Object o2)方法
    • 在此方法中指明如何判断当前类的对象大小。
  • 具体步骤:
    • 创建一个实现了Comparator接口的实现类
    • 在实现类中重写compare(Object o1, Object o2)方法,在此方法中指明的对象的比较大小标准
    • 创建此实现类的对象,并传入相关方法中的参数位置中
java 复制代码
@Test
    public void test1()
    {
        Product[] p = new Product[5];
        p[0] = new Product("HuaweiMate70",6299);
        p[1] = new Product("Xiaomi16",4999);
        p[2] = new Product("Ace1+",4799);
        p[3] = new Product("Iphone17",9999);
        p[4] = new Product("HonorMagic",6299);

        //创建一个实现了Comparator接口的实现类的对象
        Comparator comparator = new Comparator()
        {
            @Override
            public int compare(Object o1, Object o2)
            {
                if(o1 instanceof Product && o2 instanceof Product)
                {
                    Product p1 = (Product) o1;
                    Product p2 = (Product) o2;

                    //比较价格
//                    return Double.compare(p1.getPrice(), p2.getPrice());
                    //比较名字
                    return p1.getName().compareTo(p2.getName());
                }

                throw new RuntimeException("类型不匹配");
            }
        };

        Arrays.sort(p,comparator);
        for (int i = 0; i < p.length; i++)
        {
            System.out.println(p[i]);
        }
    }

两种方式的对比

  • Comparable自然排序:

    • 单一的,唯一的
    • comparaTo方法重写在对应类内部
  • Comparator定制排序:

    • 灵活的,多样的
    • compara方法重写在对应类外部
相关推荐
谎言西西里12 小时前
LeetCode 热题100 --- 双指针专区
算法
五岳14 小时前
分库分表数据源ShardingSphereDataSource的Connection元数据误用问题分析
java·mysql·爬坑
带刺的坐椅14 小时前
迈向 MCP 集群化:Solon AI (支持 Java8+)在解决 MCP 服务可扩展性上的探索与实践
java·ai·llm·solon·mcp
鼠爷ねずみ14 小时前
SpringCloud前后端整体开发流程-以及技术总结文章实时更新中
java·数据库·后端·spring·spring cloud
代码or搬砖15 小时前
String字符串
android·java·开发语言
leo__52015 小时前
基于两步成像算法的聚束模式SAR MATLAB实现
开发语言·算法·matlab
前端小白在前进16 小时前
力扣刷题:在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
Macbethad16 小时前
自动化测试技术报告
开发语言·lua
不会画画的画师16 小时前
Go开发指南:io/ioutil包应用和迁移指南
开发语言·后端·golang