比较器

简介: 比较器

比较器的概念

比较器在C++里叫重载比较运算符,改写比较的规则(改写什么叫大于号,什么叫小于号)

在Java中叫比较器,Java中的对象,正常情况下,只能进行比较:==或!=,不能使用>或<,但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小,如何实现呢?这就需要使用Comparable接口(若一个类实现了Comparable接口,就意味着“该类支持排序”, 作用在实体类上, 同时也被称之为内部比较器)或Compartor接口(我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序,作用在排序类上,同时也被称之为外部比较器)。

  • 比较器的实质就是重载比较运算符
  • 比较器可以很好的应用在特殊标准的排序上
  • 比较器可以很好的应用在根据特殊标准排序的结构上

比较器的默认规则

  • 返回负数的时候,第一个参数排在前面
  • 返回正数的时候,第二个参数排在前面
  • 返回0的时候,谁在前面无所谓

java中的示例

举个例子:现在有一堆学生数据,我们需要对其进行排序,排序规则就是按id升序。

// 定义一个升序比较器
public static class IdAscendingComparator inplements Comparator<Student>{
      public int compare(Student o1, Student O2){
          // if(o1.id < o2.id) return -1;
          // if(o1.id > o2.id) return 1;
          // return 0;
          // 上述三行代码可以简写成:
          return o1.id - o2.id
      }
}
Student student1 = new Student("A", 2, 20);  // 三个参数分别代表name,id,age
Student student2 = new Student("B", 3, 21);
Student student3 = new Student("C", 1, 22);
Student[] students = new Student[]{student1, student2, student3}
Array.sort(student, new IdAscendingComparator());  // 第二个参数就是比较规则
复制代码

javascript中的示例

当我们想把一个由数字组成的数组进行简单的排序时,可能会想到sort()方法:

var arr = [2 , 3, -1, -107, -14, 1];
console.log(arr.sort())
复制代码

结果:

[-1, -107, -14, 1, 2, 3]
复制代码

这样显然是有问题的,因为调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,也就是按照字符编码的顺序进行排序。

所以我们需要一个比较器:

console.log(arr.sort(function(a,b){
        if(a<b){
            return -1;
        }
        if(a>b){
            return 1;
        }
        return 0;
    }))
复制代码

结果:

[-107, -14, -1, 1, 2, 3]
复制代码

这样子看起来就好多了~所以我们在使用sort()方法对数组进行排序时要注意它的规则。

定义升序的比较器

var arr=[2,23,3,226,123,1,12];
//Step1:定义比较器函数
function compareASC(a,b){
 return a-b;
}
//Step2:将函数作为参数传入sort方法
arr.sort(compareASC);
复制代码

定义降序的比较器

function compareDESC(a,b){
    return b-a;
}
arr.sort(compareDESC);
复制代码

相关链接

对于比较器,叫法或应用大同小异,可以看相关链接进行了解:

C++ 重载运算符和重载函数-菜鸟教程



相关文章
|
7月前
|
算法 搜索推荐 Java
数据结构与算法__冒泡排序__Java外比较器和内比较器(排序专题)
数据结构与算法__冒泡排序__Java外比较器和内比较器(排序专题)
62 0
|
7月前
|
Java
Comparable和Comparator两种比较器详解
Comparable和Comparator两种比较器详解
84 0
|
7月前
|
存储
蓝桥杯-1/14天-数位排序【继承Comparable接口实现排序】
蓝桥杯-1/14天-数位排序【继承Comparable接口实现排序】
|
传感器 搜索推荐 数据处理
数值比较器的介绍
标题:数值比较器:数字电路中的重要组件 引言: 在现代电子设备中,数值比较器是一种常见且重要的数字电路组件。它用于比较两个数值的大小,并输出相应的逻辑信号。数值比较器广泛应用于各种领域,如数据处理、通信系统、控制系统等。本文将介绍数值比较器的原理、工作方式以及在电子设计中的应用。 一、数值比较器的原理 数值比较器是一种基本的数字电路组件,它根据输入的两个数值进行比较,并输出相应的逻辑信号。数值比较器通常由比较器和输出逻辑电路两部分组成。 1.1 比较器: 比较器是数值比较器的核心部分,它根据输入的两个数值进行比较,并输出相应的比较结果。比较器通常由比较电路和参考电压电路组成。 比较电路
330 0
|
Java
说说Comparator比较器那些用法
关于java的排序,在java8之后有了函数式接口之后,就产生了很多种Comparator比较器的写法。细数一下那些常用的比较器。
1421 1
说说Comparator比较器那些用法
|
存储 算法 Java
TreeSet类的排序问题
TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。1、自然排序    TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。
1693 0
|
存储 Java 索引
【Java集合类】之TreeSet集合与Comparable/Comparator排序
【Java集合类】之TreeSet集合与Comparable/Comparator排序
156 0
|
Java 开发者
Comparable 比较器|学习笔记
快速学习 Comparable 比较器
146 0
Comparable 比较器|学习笔记
|
Java 开发者 Perl
Comparator 比较器|学习笔记
快速学习 Comparator 比较器
154 0
Comparator  比较器|学习笔记