Java中Arrays.sort()方法的比较器详解

 更新时间:2023年12月13日 10:25:08   作者:得过且过的勇者y  
这篇文章主要介绍了Java中Arrays.sort()方法的比较器详解,Arrays.sort(Object[] a)此方法看似没有要求我们实现比较器,对于基本数据类型,String类型确实如此,因为这些类型中已经自带了compareTo()方法,需要的朋友可以参考下

Arrays.sort()方法的比较器

Arrays.sort()有以下重载(此处只展示两种):

  • Arrays.sort(Object[] a);
  • Arrays.sort(T[] a, Comparator<? super T> c);

Arrays.sort(Object[] a)

此方法看似没有要求我们实现比较器,对于基本数据类型,String类型确实如此,因为这些类型中已经自带了compareTo()方法

然而对于我们自定义的类型,则需要让该类实现Comparable接口,重写其中的compareTo()函数

否则虽然编译时不会报错,但是在运行时会出现ClassCastException的异常

Arrays.sort(T[] a, Comparator<? super T> c)

此方法的第二个参数c则明确地要求我们传入一个实现了java.util.Comparator接口的实例,而Comparator接口中声明了compare()的抽象方法,所以我们需要重写compare()方法

可以有以下几种方法

1、定义一个实现了Comparator接口的类,用该类生成一个实例作为参数

package com.demo
import java.util.Comparator;
public class LengthOfString implements Comparator<String>{
    @Override
    public int compare(String first, String second){
        return first.length() - second.length();
    }
    public static void main(String[] args){
        String[] ss = {"aa","AAA","a","aaaaaa"};
        Arrays.sort(ss,new LengthOfString());
        for(String s : ss){
            System.out.println(s);
        }
    }
}

2、由于Comparator接口只声明了一个compare()方法,可以使用匿名内部类的方式实现排序

String[] ss = {"aa","AAA","a","aaaaaa"};
Arrays.sort(ss, new Comparator<string>)String[] ss = {"aa","AAA","a","aaaaaa"};
Arrays.sort(ss, new Comparator<string>(){
    @Override
    public int compare(String first, String second){
        return first.length() - second.length();
    }
});
for(String s : ss){
    System.out.println(s);
}

3、使用Lambda表达式

Arrays.sort(ss, (String a,String b)->{
	return b.compareTo(a);//String类中定义了compareTO()方法,不需要自己实现
});

由于只有一行代码,故可以省略写成

Arrays.sort(ss, (String a,String b) -> b.compareTo(a));

到此这篇关于Java中Arrays.sort()方法的比较器详解的文章就介绍到这了,更多相关Arrays.sort()方法的比较器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

    深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

    通常来讲,重构是指不改变功能的情况下优化代码,但本文所说的重构也包括了添加功能。这篇文章主要介绍了重构Mybatis与Spring集成的SqlSessionFactoryBean(上)的相关资料,需要的朋友可以参考下
    2016-11-11
  • Maven使用Nexus创建私服的实现

    Maven使用Nexus创建私服的实现

    本文主要介绍了Maven使用Nexus创建私服的实现,通过建立自己的私服,就可以降低中央仓库负荷、节省外网带宽、加速Maven构建、自己部署构件等,从而高效地使用Maven,感兴趣的可以了解一下
    2024-04-04
  • String的两种初始化方法讲解

    String的两种初始化方法讲解

    今天小编就为大家分享一篇关于String的两种初始化方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 详解Spring Data JPA动态条件查询的写法

    详解Spring Data JPA动态条件查询的写法

    本篇文章主要介绍了Spring Data JPA动态条件查询的写法 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • java:无法访问org.springframework.boot.SpringApplication问题

    java:无法访问org.springframework.boot.SpringApplication问题

    这篇文章主要介绍了java:无法访问org.springframework.boot.SpringApplication问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 利用Java工具类Hutool实现验证码校验功能

    利用Java工具类Hutool实现验证码校验功能

    这篇文章主要介绍了利用Java工具类Hutool实现验证码校验功能,利用Hutool实现验证码校验,校验的Servlet与今天的第一篇是一样的,唯一就是验证码的生成是不一样的,利用Hutool生成验证码更快捷.需要的朋友可以参考下
    2022-10-10
  • java使用任务架构执行任务调度示例

    java使用任务架构执行任务调度示例

    在Java 5.0之前启动一个任务是通过调用Thread类的start()方法来实现的,5.0里提供了一个新的任务执行架构使你可以轻松地调度和控制任务的执行,并且可以建立一个类似数据库连接池的线程池来执行任务,下面看一个示例
    2014-01-01
  • Spring session整合到Redis过程解析

    Spring session整合到Redis过程解析

    这篇文章主要介绍了Spring session整合到Redis过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring中ApplicationContextAware的使用方法详解

    Spring中ApplicationContextAware的使用方法详解

    ApplicationContextAware 通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContext方法,这篇文章主要介绍了Spring中ApplicationContextAware的作用,需要的朋友可以参考下
    2023-03-03
  • Java实现消息轰炸的方法 附带源码

    Java实现消息轰炸的方法 附带源码

    这篇文章主要介绍了Java实现消息轰炸的方法 附带源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论