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方法重写在对应类外部
相关推荐
lhldsg8 分钟前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都14 分钟前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒22 分钟前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb31 分钟前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
辰烨chenye32 分钟前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode
微功夫信息技术39 分钟前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
小羊没烦恼!1 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
sanjiaomao3331 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
Keven_111 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
乐迪信息2 小时前
如何通过AI防爆摄像机精准判断船舶超速?
大数据·人工智能·算法·安全·目标跟踪