当前位置: 首页 > news >正文

Comparator 比较器 算法排序工具

一、Comparator简介

Comparator在算法里面简单来说是比较器,为什么会出现这个?
因为一般情况下,我们排序算法,都是排序一些简单的数据类型,Integer了,int double了什么的

但是如果我们要排序复杂的数据类型,比如说实际业务开发过程中,我们可能是查询到了所用用户的信息,需要通过用户余额进行排序,怎么排序?

这时候就要用到比较器了,通过自定义一个比较器Comparator,然后让JAVA 虚拟机按照这个规则去执行排序的算法,不然它是不知道应该怎么去执行这个排序的算法的。

二、Comparator使用教程

题目

首先我们自定义一个需要排序的类,我们定义呢,通过学生的id大小进行排序

public class Student  {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}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;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}}
思路详解

其次呢,我们自定义Comparator,重写一下compare方法,方法的参数是两个相同数据类型的参数,这个方法是怎么排序的呢?

返回的结果如果是负数,那么第一个参数放前面

返回的结果如果是正数,那么第二个参数放前面

返回的结果如果是0,那么二者的权值相等

可以把这个想象成坐标轴,坐标轴往左 也就是负数嘛,就代表的是左边的参数,也就是第一个参数出来,放前面

坐标轴往右,也就是正数,就代表的右边的参数也就是第二个参数出来,放前面

怎么去更好的理清思路写排序?

拿升序为例,我们可以写三个判断

当第一个参数小于后面的,那就得返回第一个参数是不是,也就是-1

之后再判断是否大于 是否等于 返回1 和0

写完这三行代码了是吧,然后我们再梳理一遍发现,这三个代码可以变成 para1.id-para2.id

代码如下

public static class IdComparator implements java.util.Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {//我想升序//返回0的时候二者一样 那么我们就可以统一为下面的return//            if (o1.getId()<o2.getId())return -1;//            else if (o1.getId()>o2.getId())return 1;//            else return 0;return o1.getId()-o2.getId();//而这年龄谁小谁考前 一样的话id升序//return o1.getAge()!=o2.getAge()?//        o1.getAge()-o2.getAge():o1.getId()-o2.getId();}}
完整的排序代码
package Code04;import java.util.Arrays;public class Comparator {public static class IdComparator implements java.util.Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {//我想升序//返回0的时候二者一样 那么我们就可以统一为下面的return//            if (o1.getId()<o2.getId())return -1;//            else if (o1.getId()>o2.getId())return 1;//            else return 0;return o1.getId()-o2.getId();//而这年龄谁小谁考前 一样的话id升序//return o1.getAge()!=o2.getAge()?//        o1.getAge()-o2.getAge():o1.getId()-o2.getId();}}public static void main(String[] args) {Student student1=new Student();Student student2=new Student();Student student3=new Student();student1.setId(1);student2.setId(5);student3.setId(3);Student[] students=new Student[]{student1,student2,student3};System.out.println("排序前:");for (int i = 0; i <students.length ; i++) {System.out.println(students[i]);}Arrays.sort(students,new IdComparator());System.out.println("排序后:");for (int i = 0; i <students.length ; i++) {System.out.println(students[i]);}}
}

http://www.dtcms.com/a/540783.html

相关文章:

  • 做网站的流量怎么算钱浦东网站建设箱海运
  • 【LeetCode热题100(55/100)】子集
  • 网站底部设计代码响应式网站检测工具
  • 前端开发,为什么容易被边缘化?
  • PartList::getNamedPart(...)获取对象为空
  • 做食品网站有哪些东西企业信息管理系统erp
  • 廊坊网站制作费用青海西宁网页网站制作
  • 东莞好的网站建设哪家好做设计找素材那个网站最好用
  • php 怎么做视频网站陕西省建设网三类人员成绩公示
  • 多模态的大模型文本分类模型代码(一)——准备阶段
  • 算法———栈
  • 甜点的网站建设规划书企业qq和个人qq有什么区别
  • java公式解析工具
  • 元推理:自指自洽,求道求德,美轮美奂
  • IE-Sec笔记7
  • 【Linux基础知识系列:第一百六十一篇】终端文件管理器:Midnight Commander (mc)
  • Google Veo 3.1 提示词生成器:让 AI 视频创作效率翻倍的免费工具
  • 【医学影像 AI】AutoMorph:基于深度学习的视网膜血管自动化分析工具
  • 郑州做网站找赢博科技定制app开发
  • 使用Docker安装Jenkins:完整指南与最佳实践
  • 手写一个C++字符串类:从底层理解String的实现
  • 大学学院教授委员会制度研究(四)职能设置--杨立恒毕业论文
  • Docker 命令自动补全:临时与持久化配置指南
  • 简单使用Nest+Nacos+Kafka实现微服务
  • 了解学习Redis主从复制
  • 【含文档+PPT+源码】基于java web的篮球馆管理系统系统的设计与实现
  • 眉山建设银行官方网站html5的网站设计与实现是做什么
  • 【音视频】图像与音频的3A技术:ISP相机与音频3A算法的对比
  • 字节码的“字节”含义
  • 做天然文化石的网站锦州网站建设多少钱