千家信息网

Java中Comparator类的实例用法

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍"Java中Comparator类的实例用法",在日常操作中,相信很多人在Java中Comparator类的实例用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2025年02月01日Java中Comparator类的实例用法

这篇文章主要介绍"Java中Comparator类的实例用法",在日常操作中,相信很多人在Java中Comparator类的实例用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java中Comparator类的实例用法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

方式一:自然排序: java . lang . Comparable

> Comparable 接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
> 实现 Comparable 的类必须实现 compareTo ( Object obj )方法,两个对像即通 过 compareTo ( Object obj )方法的返回債来比较大小。如果当前对象 this 大于形参对象 obj ,则返 回正整数,如果当前对象 this 小于形参对象 obj ,则返回负整数,如果当前对象 this 等于形参对 象 obj ,则返回零。
> 实现 Comparable 接口的对象列表(和数组)可以通过 Collections . sort 或 Arrays . sort 进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
> 对于类 C 的每一个e1和e2来说,当且仅当e1.compareTo(e2)==0与e1.equals(e2)具有相同 的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。建议(虽然不是必需的)最好使自然排 序与 equals 一致。

 /*    Comparable接口的使用举例:自然排序    1.像String、包装类等实现了Compareable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式    2.像String、包装类重写compareTo()方法以后,进行了从小到大的排列    3.重写compareTo(obj)的规则:      如果当前对象this大于形参对象obj,则返回正整数      如果当前对象this小于形参对象obj,则返回负整数      如果当前对象this等于形参对象obj,则返回零    4.对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法      在compareTo(obj)方法中指明如何排序     */    @Test    public void test1(){        String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};        Arrays.sort(arr);        System.out.println(Arrays.toString(arr));//[AA, CC, DD, GG, JJ, KK, MM]    }    @Test    public void test2(){        Goods[] arr = new Goods[5];        arr[0] = new Goods("lenovoMouse",34);        arr[1] = new Goods("dellMouse",43);        arr[2] = new Goods("miMouse",12);        arr[3] = new Goods("huaweiMouse",65);        arr[4] = new Goods("microsoftMouse",43);        Arrays.sort(arr);        System.out.println(Arrays.toString(arr));    }

方式二:定制排序: java . util . Comparator

> 当元素的类型没有实现 java . lang . Comparable 接口而又不方便修改代码,或者实现 了 java . lang . Comparable 接口的排序规则不适合当前的操作,那么可以考虑使 用 Comparator 的 对象来排序,强行对多个对象进行整体排序的比较。
> 重写 compare ( Object o1, Object o2)方法,比较o1和o2的大小:如果方法回正整数,则表示o1大 于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。
> 可以将 Comparator 传递给 sort 方法(如 Collections . sort 或 Arrays . sort )从而允许在排序顺 序上实现精确控制。
> 还可以使用 Comparator 来控制某些数据结构(如有序 set 或有序映射)的顺序,或者为那些没有 自然顺序的对象 colection 提供排序。

 /*    Comparator接口的使用:定制排序    1.背景:    当元素的类型没有实现java.long.Comparable接口而又不方便修改代码,或者实现了java.long.Comparable接口的排序规则    不适合当前的操作,那么可以考虑使用Comparator的对象来排序    2.重写compare(Object o1,Object o2)方法,比较o1和o2的大小:      如果方法返回整数,则表示o1大于o2.      如果返回0,表示相等;      返回负整数,表示o1小于o2.     */    @Test    public void test3(){        String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};        Arrays.sort(arr,new Comparator(){            //按照字符串从大到小的顺序排列            @Override            public int compare(Object o1, Object o2) {                if(o1 instanceof String && o2 instanceof String){                    String s1 = (String)o1;                    String s2 = (String)o2;                    return -s1.compareTo(s2);//加-表示:从小到大排列-->从大到小                }                throw new RuntimeException("输入的数据类型不一致!");            }        });        System.out.println(Arrays.toString(arr));//[MM, KK, JJ, GG, DD, CC, AA]    }    @Test    public void test4(){        Goods[] arr = new Goods[5];        arr[0] = new Goods("lenovoMouse",34);        arr[1] = new Goods("dellMouse",43);        arr[2] = new Goods("miMouse",12);        arr[3] = new Goods("huaweiMouse",65);        arr[4] = new Goods("microsoftMouse",43);        Arrays.sort(arr, new Comparator() {            //指明商品比较大小的方式:按照产品名称从低到高排序,再按照价格从高到低排序            @Override            public int compare(Object o1, Object o2) {                if(o1 instanceof Goods && o2 instanceof Goods){                    Goods g1 = (Goods)o1;                    Goods g2 = (Goods)o2;                    if(g1.getName().equals(g2.getName())){                        return -Double.compare(g1.getPrice(),g2.getPrice());                    }else{                        return g1.getName().compareTo(g2.getName());                    }                }                throw new RuntimeException("输入的数据类型不一致!");            }        });        System.out.println(Arrays.toString(arr));    }

到此,关于"Java中Comparator类的实例用法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

对象 排序 方法 接口 整数 自然 形参 大小 实例 有序 一致 方式 类型 学习 元素 数据 规则 顺序 从小到大 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 拜耳软件开发招聘信息 江苏媒体网络技术服务内容 静海区网络技术创造辉煌 怎么查询多节点数据库 南岸区工商软件开发服务公司 服务器端口对应哪个服务 苏州阿里云服务器运维效率 易语言抢红包软件开发 某高校图书馆设计一个数据库 无法连接打印数据库 ksweb数据库怎么添加 成都软件开发项目经理需要做哪些 教育系统网络安全周工作总结 前端需要数据库 驾考宝典电脑版软件开发 网络安全法所有条款 卸载数据库指定账户已存在 国家网络安全法实施之日 服务器操作系统价值 鹤壁中等计算机网络技术专业 该问题应该在数据库三级模式 信息网络技术原理张基温 数据库系统=db 西安弈聪软件开发有限公司 临夏邮储银行网络安全宣传 db2安装创建数据库 海淀区网络安全进展 数据库压力测试工具绿色完整版 k3数据库行业性质 浙江惠普服务器维修维保多少钱
0