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方法重写在对应类外部
相关推荐
手写码匠3 分钟前
华为云Flexus+DeepSeek征文|Dify 多 Agent 故障演练实战:用混沌工程主动“搞破坏“,让智能体系统越炸越稳
人工智能·深度学习·算法·aigc
何以解忧,唯有..6 分钟前
SpringBoot 中 @Transactional 注解失效的 8 种常见场景与解决方案
java
SL-staff14 分钟前
AB测试数据失真根因与变量热替换实战:JVS-Rules函数计算器架构解析
java·运维·微服务·函数式编程·规则引擎·变量管理·营销技术
Irene199116 分钟前
Java 3 天入门:“最小必要知识”的功利性学法
java
长谷深风11124 分钟前
Agent 何时该 Replan:五个关键判断
java·大数据·开发语言·ai agent·ai智能体·agent设计·clarify机制
lingran__30 分钟前
C++ STL unordered系列(哈希) 底层剖析与模拟实现万字详解 | 基于哈希表,复刻 SGI-STL 泛型哈希容器架构
开发语言·c++·后端·哈希算法·哈希表·泛型编程·unordered系列
叠层归一研究院34 分钟前
如何用程序搭建一个 AGI 种子系统(三):生长如何对接物理与数学宇宙
人工智能·python·算法·机器学习·transformer·agi
阿弱1 小时前
graph-core 的边与命令模式设计
java·后端·agent
show4331 小时前
2026小程序端AI智能优化技术实践:转文字后自动纠错+润色+分段算法分析
人工智能·算法·小程序