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方法重写在对应类外部
相关推荐
KaMeidebaby3 分钟前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy6184 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
云烟成雨TD9 分钟前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework25 分钟前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
天佑木枫30 分钟前
15天Python入门系列 · 序
开发语言·python
逍遥德1 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
云烟成雨TD1 小时前
Spring AI 1.x 系列【54】Retry 机制分析
java·人工智能·spring
weixin_523185321 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
手写码匠1 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
点燃大海1 小时前
SpringAI构建智能体
java·spring boot·spring·springai智能体