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方法重写在对应类外部
相关推荐
一杯美式 no sugar几秒前
C++入门基础
开发语言·c++
大鹏说大话1 分钟前
AI 辅助编程革命:如何利用 GitHub Copilot 等工具重塑开发效率
开发语言
rit84324992 分钟前
有限元法求转子临界转速的MATLAB实现
开发语言·matlab
echome8882 分钟前
Python 异步编程实战:asyncio 核心概念与最佳实践
开发语言·网络·python
dreamxian4 分钟前
苍穹外卖day09
java·spring boot·tomcat·log4j·maven
剑海风云4 分钟前
JDK 26之安全增强
java·开发语言·安全·jdk26
左左右右左右摇晃6 分钟前
Java并发——多线程
java·开发语言·jvm
AMoon丶7 分钟前
Golang--内存管理
开发语言·后端·算法·缓存·golang·os
阿里嘎多学长8 分钟前
2026-03-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
23.9 分钟前
【Java】字符串底层与常量池演变全解析
java·开发语言·jvm