比较器

2023-11-15

Comparator比较器

Collcetion工具集中的sort()
public static <T> void sort(List<T> list)
public static <T> void sort(List<T> list,Comparator<? super T> c)

Comparator接口在java.util包下面,排序是Comparator需要实现的功能之一,该接口代表的是一个比较器,具有可比性,可以做排序,本质是比较两个对象谁排前面谁排在后面。

public int compare(Object o1,Object o2) : 比较两个参数的顺序
	比较结果:大于、等于、小于
	如果升序排序:则o1小于o2返回(负数),相等返回0,大于返回(正数)
	如果降序排序:则o1小于o2返回(正数),相等返回0,大于返回(负数)
	简化操作:
		升序:o1-o2
		降序: o2-o1

示例:

public static void main(String[] args) {
    //public static <T> void sort(List<T> list)     
    ArrayList<String> list = new ArrayList<>();
    list.add("abc");
    list.add("cba");
    list.add("bca");
    list.add("sba");
    list.add("nba");
    // 排序规则,按照字符串的第一个字母降序排序
    // 使用接口中的方法:
    // public static <T> void sort(List<T> list,Comparator<? super T> c)  
    // public int compare(Object o1,Object o2):比较两个参数的的顺序
    Collections.sort(list,new Comparator(){
        @Override
		public int compare(String o1,Strng o2) {
            /*if(o2.charAt(0) - o1.charAt(0) > 0){
                return 1;
            } else if ( o2.charAt(0) - o1.charAt(0) == 0){
                return 0;
            } else {
                return -1;
            }*/
            return o2.charAt(0) - o1.charAt(0);
        }
    });
    System.out.println(list);
}
// 控制台结果:
[sba,nba,cba,bca,abc]

简述Comparable和Comparator两个接口的区别

Comparable:强行对实现他的每个类对象进行整体排序。这种排序我们一般称为自然排序,comparaTo()被称为它的自然比较方法。只能在类中实现comparaTo()方法一次,不能经常修改类的代码实现自己想要的排序。 实现此接口的对象列表(和数组)可以通过Collections.sort()(和Arrays.sort())进行自动排序,对象可以用作有序映射中的键或者有序集合中的元素,无序指定比较器。

Comparator:强行对某个对象进行整体排序。可以将Comparator传递给sort()方法(如Collections.sort()后者Arrays.sort()),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(有序的set或者是有序的映射)的顺序,或者为那些没有自然顺序的对象Collection提供排序。

示例:

package comparator;

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

package comparator;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class MainClass {
    public static void main(String[] args) {
        // 假如学生都是老外 名字都是字母
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("tom",20));
        list.add(new Student("lily",18));
        list.add(new Student("jack",26));
        list.add(new Student("rose",40));
        list.add(new Student("smith",26));
        // 按照年龄升序排序
        // 如果年龄相同的话,然后按照姓名排序,按照姓名的首字母降序排序
        Collections.sort(list,new Comparator<Student>(){
            @Override
            public int compare(Student o1,Student o2) {
                int num  = o1.getAge() - o2.getAge();
                if( num == 0) {
                    num = o2.getName().charAt(0) - o1.getName().charAt(0);
                }
                return num;
            }
        });
        System.out.println(list);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较器 的相关文章

随机推荐

  • [课程复习] 软件工程导论之经典题目回顾 (一)选择题、填空题1

    作者最近在复习考博 乘此机会分享一些计算机科学与技术 软件工程等相关专业课程考题 一方面分享给考研 考博 找工作的博友 另一方面也是自己今后完成这些课程的复习资料 同时也是在线笔记 基础知识 希望对您有所帮助 不喜勿喷 软件工程导论 张海藩
  • docker nexus3磁盘空间满,扩容后导致NullPointerException问题

    文章目录 Nexus修复文档 问题描述 修复过程 遇到的坑 Nexus修复文档 问题描述 公司内部一个私有jar无法上传至服务器 后进入nexus 查看日志 发现报disk异常 查看磁盘占用 只剩几百兆的磁盘在那边瑟瑟发抖了 后公司网管在双
  • vue3.2 对el-table 树型结构数据的处理(干货)

    vue3 2 对el table 树型结构数据的处理 干货 将偏平数据转为树状结构的数据 封装了两种方法 将一维数组处理成带children的el tree树状数据结构 第一种方法 使用递归的方式处理偏平化数据 Method 使用递归的方式
  • cad卸载_CAD卸载后为什么安装不了?解决方法原来是这样!

    看到有不少小伙伴说自己遇到这样的问题 想要尝试重新安装CAD软件 但是在安装过程中系统却提示CAD软件已安装 导致我们无法继续安装 怎么办 出现这种情况通常是因为软件没有正常卸载导致的 例如直接删除安装目录文件和快捷方式 这样做的结果是注册
  • idea中maven项目编译后中文乱码问题

    一 问题描述 idea中maven项目编译后 jar包里的中文乱码 如下图 二 问题发生原因 2 1 在idea控制台进行编译 使用 mvn clean package Dmaven test skip true 2 2 其实编译过程里已经
  • unsigned long long妙用

    洛谷 P2181 对角线 使用unsigned long long可以防止爆精度 以下是各精度的范围 include
  • 仙境传说RO:添加地图传送门教程

    仙境传说RO 添加地图传送门教程 大家好我是艾西 上一篇文章中我跟大家分享了仙境传说RO怎么添加NPC NPC可以加入自己想要售卖的装备物品等 那么对于玩家跑地图需要手动跑肯定是不方便的毕竟大家玩游戏就是为了娱乐以及放松 那么今天艾西教大家
  • ajax 返回值赋值给父页面,关于父窗口给页面中的iframe传递数据的问题

    framework2 0 要达到效果 当点击gridview中任一条记录的linkbutton 在RowDataBound时 捆有唯一标识该条记录的id 时 下面的iframe可以显示详细的编辑页面 并且显示该条记录的各个field值 要求
  • 图像算法之双线性差值算法(灰度图像)

    1 函数定义 双线性差值算法 struct stPGMImage BilinearInterpolation struct stPGMImage image double zoom factor x double zoom factor y
  • JMETER性能自动化测试-02性能指标

    什么是事务 1 可以是一个接口请求1次 jmeter中 默认1个接口完成1次请求 当做1个事务 2 也可以是多个接口请求 完成一个功能或者一个业务 事务控制器就可以把多个接口合并成1个接口 3 jmeter中的事务 可以是1个接口的1次请求
  • Android-组件化开发

    一 优点 1 基础功能复用 节省开发时间 在项目初期框架搭建的时候 基础功能可直接搬移复用 日积月累 每个人 公司应该都会有一套自己的Base 2 业务拆分 便于分工 实现解耦 单独的业务模块抽取成一个独立的Module 不同人员在各自的模
  • Spring框架之IOC(控制反转)-----(Inversion of Control)

    Spring框架之IOC 控制反转 Inversion of Control 什么是IOC 用来完成 原来由程序员主动通过new来实例化对象的这个事情 转交给Spring来负责创建对象 控制反转中 控制是控制类的对象 反转是指将对象交给Sp
  • nodejs连接mongodb数据库,通过each对数据库数据进行遍历时报错及解决方案

    平常我们用nodejs连接好mongodb数据库后 用find 方法随数据库数据进行查找 然后遍历 进行数据解析 遍历时一般采用each 方法进行遍历 但是有时候可能由于数据库版本和nodejs版本问题 会遍历出错 故提供一下解决方案 如代
  • 关于 torch 的 device id 与真实 GPU id 的关系

    需要知道的几个点 cuda id 中的 id 并不一定是真实硬件的GPU id 而是运行时可用的 GPU id 从0开始计数 torch cuda device count 可查看运行时可用的 GPU 数量 torch cuda get d
  • 空参构造方法和有参构造方法的使用

    脑筋不动 看视频就会打瞌睡 把代码敲出来才会发现问题 重新回顾了构造方法 空参和有参构造都能够调用show getxx show方法只是为了显示属性值 getxxx 获取属性值 可以打印 可以赋值给其他变量 声明一个手机类 package
  • HTTP 协议

    目录 编辑一 HTTP 协议是什么 二 抓包工具的使用 三 HTTP 请求 1 认识 URL 2 认识方法 3 认识请求 报头 HOST Content Length 和 Content Type 编辑 User Agent Referer
  • ipython import pandas出错

    其实这个错误是早上就发现了的 但是由于代码上运行没得问题 我就纳闷了 但是可以运行代码就无伤大雅 下午事情差不多了 想起这个问题 就来debug一下 为了让错误更加清晰的呈现出来 我又要费大家电了 lt 哈哈 gt 下面就是报的完整错误 I
  • python 运行时出现fixture xxx not found

    一 问题 在pycharm中运行带有pytest包的代码会出现如下错误 E fixture a not found gt available fixtures cache capfd capfdbinary caplog capsys ca
  • Obsidian 常用插件记录+typora 转移过来问题记录

    Typora 转 Obsidian 一些常用插件记录 插件目录 一 插件 1 obsidian custom attachment location 2 obsidian editing toolbar 3 待续 二 问题 1 图片展示问题
  • 比较器

    Comparator比较器 Collcetion工具集中的sort public static