返回顶部
首页 > 资讯 > 后端开发 > JAVA >JAVA语言-比较器Comparator
  • 535
分享到

JAVA语言-比较器Comparator

javajvmc++ 2023-10-23 08:10:44 535人浏览 八月长安
摘要

目录 一、什么是Comparator 二、Java compare方法和compareTo方法 三、java中Comparable和Comparator的区别 Comparator的例子 一、什么是Comparator Comparat

目录

一、什么是Comparator

二、Java compare方法和compareTo方法

三、java中Comparable和Comparator的区别

Comparator的例子


一、什么是Comparator

Comparator 是javase中的接口,位于java.util包下。

数组工具类和集合工具类中提供的工具方法sort方法都给出了含有Comparator接口的重载方法。

Arrays.sort(T[],Comparator c);Collections.sort(List list,Comparator c);

List实例调sort方法

default void sort(Comparator c) 

demo如下:

List letters = new ArrayList<>(str.length());// 将英文字母先排序好letters.sort(new Comparator() {    @Override    public int compare(Character o1, Character o2) {        return Character.toLowerCase(o1) - Character.toLowerCase(o2);    }});

使用总结:在可以使用 Comparator实例 的地方,new Comparator<注意这里泛型要写> 然后覆写 compare方法即可。

在List或数组中的对象如果没有实现Comparable接口时,那么就需要调用者为需要排序的数组或List设置一个Compartor,Compartor的compare方法用来告诉代码应该怎么去比较两个实例,然后根据比较结果进行排序。

使用场景:
排序需要比较,需要比较两个对象谁在前谁在后。

一般需要做比较的逻辑都可以使用的上Comparator,最常用的场景就是排序,排序常使用Arrays和Collections的sort方法。

二、Java compare方法和compareTo方法

//数组排序String[] str = new String[5];Arrays.sort(str, new Comparator() {    @Override    public int compare(String o1, String o2) {        // TODO Auto-generated method stub        return 0;    }});//List集合排序ArrayList list = new ArrayList();Collections.sort(list, new Comparator() {    @Override    public int compare(String o1, String o2) {        // TODO Auto-generated method stub        return 0;    }});

上述代码中重写了Comparator接口中的compare()方法,有两个参数自定义为 o1 和 o2,默认返回 0,可修改方法体中的内容,返回不同的参数值(整型)

也可以调用compareTo()方法在return时对参数进行比较:

String[] str = new String[5];Arrays.sort(str, new Comparator() {    @Override    public int compare(String o1, String o2) {        // TODO Auto-generated method stub        return o1.compareTo(o2);    }});

s1.compareTo(s2) 实际上是比较的ascii码

public class CompareTest {    public static void main(String[] args) {        ArrayList list= new ArrayList();        String s1 = "1";        String s2 = "2";        System.out.println(s1.compareTo(s2));//相当于s1-s2; }输出如下图}

三、java中Comparable和Comparator的区别

java中Comparable和Comparator的区别
参考URL: https://zhuanlan.zhihu.com/p/137879181
java - compare()和compareTo()有什么区别?
参考URL: Https://www.itranslater.com/qa/details/2325754104607409152

Comparable
Comparable是java.lang包下面的接口,lang包下面可以看做是java的基础语言接口。

实际上Comparable接口只定义了一个方法:

public int compareTo(T o);

实现这个接口的类都需要实现compareTo方法,表示两个类之间的比较。

这个比较排序之后的order,按照java的说法叫做natural ordering。这个order用在一些可排序的集合比如:SortedSet,SortedMap等等。

几乎所有的数字类型对象:Integer, Long,Double等都实现了这个Comparable接口。


Comparator
Comparator是一个Interface,需要实现compare方法:

int compare(T o1, T o2);

Comparator在java.util包中,代表其是一个工具类,用来辅助排序的。

在讲Comparable的时候,我们提到Comparable指定了对象的natural ordering,如果我们在添加到可排序集合类的时候想按照我们自定义的方式进行排序,这个时候就需要使用到Comparator了。

Collections.sort(List,Comparator),Arrays.sort(Object[],Comparator) 等这些辅助的方法类都可以通过传入一个Comparator来自定义排序规则。

还有一个区别就是Comparator允许对null参数的比较,而Comparable是不允许的,否则会爬出NullPointerException。

在这里插入图片描述

Comparator的例子

@Test    public void useCompare(){        List list1 = Arrays.asList(5, 3, 2, 4, 1);        Collections.sort(list1);        log.info("{}",list1);        List list2 = Arrays.asList(5, 3, 2, 4, 1);        Collections.sort(list2, (a, b) -> b - a);        log.info("{}",list2);    }

输出结果:
[main] INFO com.flydean.CompareUsage - [1, 2, 3, 4, 5]
[main] INFO com.flydean.CompareUsage - [5, 4, 3, 2, 1]

默认情况下Integer是按照升序来排的,但是我们可以通过传入一个Comparator来改变这个过程。

来源地址:https://blog.csdn.net/qq_58148854/article/details/130149739

--结束END--

本文标题: JAVA语言-比较器Comparator

本文链接: https://lsjlt.com/news/440184.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JAVA语言-比较器Comparator
    目录 一、什么是Comparator 二、Java compare方法和compareTo方法 三、java中Comparable和Comparator的区别 Comparator的例子 一、什么是Comparator Comparat...
    99+
    2023-10-23
    java jvm c++
  • Java中的比较器(Comparator)
    Java中的比较器(Comparator)是一种对象,用于定义两个对象之间的比较规则。它是一个独立的类,实现了Comparator接口,通常用于对集合中的元素进行排序。Comparator接口中有一个compare()方法,它接受两个对象作...
    99+
    2023-09-01
    java 开发语言
  • java中的比较器comparable和Comparator的区别
    Comparable比较器Comparable 位于 java.lang 包下,本质上是一个内比较器,实现了 Comparable 的类可以自己比较,至于比较的结果如何则需要依赖于自然比较方法 compareTo 的实现。compareTo...
    99+
    2020-05-16
    java入门 java 比较器 comparable comparator 区别
  • java 中Comparable与Comparator详解与比较
    java 中Comparable与Comparator详解今天查看TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Co...
    99+
    2023-05-31
    java comparable comparator
  • 【数据结构Java版】对象的比较之Comparable与Comparator比较器
    目录   一、基本类型的比较 二、对象类型的比较 (1)对象类型比较出现的问题 (2)重写基类equals方法 (3)基于Comparable接口的比较 1.实现Comparable接口,重写compareTo方法 (4)基于Compara...
    99+
    2023-09-06
    数据结构 比较 Comparable Comparator 算法
  • java中对象的比较equal、Comparble、Comparator的区别
    目录关于对象值相等的比较三种比较风格覆写基类的equal关于对象值大于、等于、小于的比较–基于自然顺序(按照<小于号的形式)基于Comparble接口类的比较关于对象值大于、等...
    99+
    2024-04-02
  • Java案例使用比较排序器comparator实现成绩排序
    需求:用TreeSet集合存储多个学生信息(姓名,语文成绩,数学成绩),并遍历该集合;要按照总分从高到低进行排序 分析: 1.创建学生类 成员变量 姓名,语文成绩、数学成绩;成员方法...
    99+
    2024-04-02
  • Java 与 Python两种编程语言的比较
    Java 和 Python 是两种非常流行的编程语言,它们都有自己的优势和特点。下面是 Java 和 Python 的比较: Java Java 是一种静态类型的编程语言,主要用于构建大型、高性能、跨平台的应用程序。以下是 Java 的一些...
    99+
    2023-09-21
    python java 开发语言
  • Go语言与其他编程语言的比较与对比
    标题:Go语言与其他编程语言的比较与对比 在当今软件开发领域中,有许多种编程语言可供开发人员选择。其中,Go语言作为一种相对年轻但备受关注的语言,具有独特的特性和优势。本文将对Go语言...
    99+
    2024-04-02
  • Java 和 Linux Shell:两种编程语言的比较
    Java 和 Linux Shell 都是常见的编程语言,但它们有着截然不同的用途和特点。本文将比较这两种编程语言的优缺点,以及它们在不同场景下的适用性。 Java 是一种面向对象的编程语言,它具有良好的可移植性和跨平台性。Java 代码...
    99+
    2023-10-15
    django linux shell
  • c语言编辑器哪个比较好
    最佳 c 语言编辑器:visual studio code:功能强大,免费开源,界面友好。sublime text:商业编辑器,速度快,界面可定制。atom:免费开源,可跨平台运行,可扩...
    99+
    2024-05-21
    sublime c语言 c++
  • c语言怎么比较大小
    c语言通过关系操作符、对字符进行比较、字符串和数组来比较大小。1、关系操作符,如大于(>),小于(<),大于等于(>=),小于等于(<=),等于(==)和不等于(!=);2、对字符进行比较,在C语言中,字符变量以AS...
    99+
    2023-08-09
  • c语言怎么学比较快
    刚接触 c 语言的新手可以通过实战项目快速上手,并分步学习、勤加练习,提高对其关键概念的理解。寻求导师、利用社区资源和保持学习热情,可以有效地促进学习过程。 C 语言快速学习指南 初学...
    99+
    2024-04-05
    c语言 在线课程
  • C语言与Go编程语言的异同比较
    C语言与Go编程语言的异同比较 随着计算机科学的不断发展,各种编程语言层出不穷,其中C语言和Go编程语言作为两种广泛应用的编程语言,各自具有独特的特点和优势。本文将从语法结构、并发编程...
    99+
    2024-04-02
  • C语言和Python哪个比较好
    这篇文章主要讲解了“C语言和Python哪个比较好”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言和Python哪个比较好”吧!编程语言 发展进程 学哪...
    99+
    2024-04-02
  • C语言怎么比较三个数
    这篇文章主要介绍了C语言怎么比较三个数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么比较三个数文章都会有所收获,下面我们一起来看看吧。比较三个数以下实例中定义了两个整数变量,并使用 if 来比较三个数...
    99+
    2023-06-17
  • C语言怎么比较两个数
    今天小编给大家分享一下C语言怎么比较两个数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。比较两个数以下实例中定义了两个整数变...
    99+
    2023-06-17
  • go语言如何比较字符串
    这篇文章主要介绍“go语言如何比较字符串”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言如何比较字符串”文章能帮助大家解决问题。比较方法:1、直接使用“==”运算符比较,语法“str1 == ...
    99+
    2023-07-05
  • C语言与C++的异同比较
    C语言与C++的异同比较 C语言和C++都是常见的编程语言,并且在软件开发中被广泛应用。虽然它们在很多方面相似,但也存在一些明显的异同点。本文将通过具体的代码示例,来探讨C语言和C++...
    99+
    2024-04-02
  • Golang和C语言的异同比较
    Golang和C语言的异同比较 Golang和C语言是两种非常流行的编程语言,各有其特点和优势。本文将对这两种语言进行比较,并通过具体的代码示例来展示它们之间的异同之处。 一、语言概述...
    99+
    2024-03-07
    c语言 (c) 异同比较 go语言 网络编程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作