最全Arrays.sort函数举例

2023-05-16

Arrays.sort()的作用是对括号中的数组进行排序,时间复杂度O(n*logn),方法返回值为void。 是在原来数组的空间基础上进行升序排序,因此不需要定义一个数组接收它,即不需要返回值。
Arrays.sort()重载了四类方法:
sort(T[] a):对指定T型数组按数字升序排序。
sort(T[] a,int formIndex, int toIndex):对指定T型数组的指定范围按数字升序排序。
sort(T[] a, Comparator<? supre T> c): 根据指定比较器产生的顺序对T型数组进行排序。
sort(T[] a, int formIndex, int toIndex, Comparator<? supre T> c): 根据指定比较器产生的顺序对T型数组的指定范围进行排序。

1、sort(T[] a) 的使用

import java.util.Arrays;
import java.util.Comparator;

public class ArraysSort {
    public static void main(String[] args) {
        int[] a={2,5,4,3,1,8};
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
    }
}// 结果// [1, 2, 3, 4, 5, 8]

2、sort(T[] a,int formIndex, int toIndex) 的使用

import java.util.Arrays;
import java.util.Comparator;

public class ArraysSort {
    public static void main(String[] args) {
        int[] a={2,5,4,3,1,8};
        Arrays.sort(a,2,5);
        System.out.println(Arrays.toString(a));
    }
}

// 结果
// [2, 5, 1, 3, 4, 8]

3、sort(T[] a, Comparator<? supre T> c)的使用

// 按第一维元素比较二维数组
import java.util.Arrays;
import java.util.Comparator;

public class ArraysSort {
    public static void main(String[] args) {
        int[][] nums=new int[][]{{1,3},{1,2},{4,5},{3,7}};
        //方法一
        Arrays.sort(nums,new Comparator<int[]>(){
            @Override
            public int compare(int[] a,int[] b){
                if(a[0]==b[0]){ // 不明白为什么要这样写  ,自己的基础有问题,不解
                    return a[1]-b[1];
                }else{
                    return a[0]-b[0];
                }
            }
        });
        for (int[] num : nums) {
            System.out.println(Arrays.toString(num));
        }
    }
}

// 结果
/*
[1, 2]
[1, 3]
[3, 7]
[4, 5]
*/


// 按照第二维元素比较二维数组

import java.util.Arrays;
import java.util.Comparator;

public class ArraysSort {
    public static void main(String[] args) {
        int[][] nums=new int[][]{{1,3},{1,2},{4,5},{3,7}};
        //方法一
        Arrays.sort(nums,new Comparator<int[]>(){
            @Override
            public int compare(int[] a,int[] b){
                if(a[1]==b[1]){  //同样不解
                    return a[0]-b[0];
                }else{
                    return a[1]-b[1];
                }
            }
        });

        //方法二
        /*Arrays.sort(nums,(a,b)->a[1]-b[1]);*/
        for (int[] num : nums) {
            System.out.println(Arrays.toString(num));
        }

    }
}
// 结果
/*
[1, 2]
[1, 3]
[4, 5]
[3, 7]
*/

补充:sort(T[] a, Comparator<? supre T> c)类对象比较的使用

import java.util.Arrays;
import java.util.Comparator;

class Dog{
    int size;
    int weight;

    public Dog(int s, int w){
        size = s;
        weight = w;
    }
}

class DogSizeComparator implements Comparator<Dog>{

    @Override
    public int compare(Dog o1, Dog o2) {
        return o1.size - o2.size;
    }
}

class DogWeightComparator implements Comparator<Dog>{  // **在这里尖括号传入的是对象**

    @Override
    public int compare(Dog o1, Dog o2) {
        return o1.weight - o2.weight;
    }
}

public class ArraysSort {
    public static void main(String[] args) {
        Dog d1 = new Dog(2, 50);
        Dog d2 = new Dog(1, 30);
        Dog d3 = new Dog(3, 40);

        Dog[] dogArray = {d1, d2, d3};
        printDogs(dogArray);

        Arrays.sort(dogArray, new DogSizeComparator());
        printDogs(dogArray);

        Arrays.sort(dogArray, new DogWeightComparator());
        printDogs(dogArray);
    }

    public static void printDogs(Dog[] dogs){
        for(Dog d: dogs)
            System.out.print("size="+d.size + " weight=" + d.weight + " ");

        System.out.println();
    }
}

// 结果
/*
size=2 weight=50 size=1 weight=30 size=3 weight=40 
size=1 weight=30 size=2 weight=50 size=3 weight=40 
size=1 weight=30 size=3 weight=40 size=2 weight=50 
*/

补充:那么在参数中会出现super呢?这意味着这类型可以是T或者它的父类型。这就是的该方法可以允许所有子类使用相同的比较器。

import java.util.Arrays;
import java.util.Comparator;

class Animal{
    int size;
}

class Dog extends Animal{
    public Dog(int s){
        size = s;
    }
}

class Cat extends Animal{
    public Cat(int s){
        size  = s;
    }
}

class AnimalSizeComparator implements Comparator<Animal>{
    @Override
    public int compare(Animal o1, Animal o2) {
        return o1.size - o2.size;
    }
}

public class ArraysSort {
    public static void main(String[] args) {
        Dog d1 = new Dog(2);
        Dog d2 = new Dog(1);
        Dog d3 = new Dog(3);

        Dog[] dogArray = {d1, d2, d3};
        printDogs(dogArray);

        Arrays.sort(dogArray, new AnimalSizeComparator());
        printDogs(dogArray);

        System.out.println();
        
        Cat c1 = new Cat(2);
        Cat c2 = new Cat(1);
        Cat c3 = new Cat(3);

        Cat[] catArray = {c1, c2, c3};
        printDogs(catArray);

        Arrays.sort(catArray, new AnimalSizeComparator());
        printDogs(catArray);
    }

    public static void printDogs(Animal[] animals){
        for(Animal a: animals)
            System.out.print("size="+a.size + " ");
        System.out.println();
    }
}

// 结果
/*
size=2 size=1 size=3 
size=1 size=2 size=3 

size=2 size=1 size=3 
size=1 size=2 size=3 
*/

巨人的肩膀:https://www.cnblogs.com/SupremeBoy/p/12717532.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最全Arrays.sort函数举例 的相关文章

  • win10 WSL2 AirSim 仿真环境搭建

    win10 WSL2 AirSim 仿真环境搭建 wsl2AirSim安装教程基本环境安装WSL2安装PX4 编译环境配置好默认的工具链下载编译PX4 安装AirSim环境安装虚幻引擎下载AirSimLandscapeMountains下载
  • C语言实现UDP通信

    UDP通信 UDP是一种无连接的尽最大努力交付的不可靠连接 xff0c 通信之前无需先建立连接 xff0c 自然而然 xff0c 通信之后也就无需再释放连接 通信的套接字 UDP所采用的通信接口与前面讲过的TCP通信接口相同 xff0c 只
  • Github两个分支无法合并问题的解决与复现

    问题描述 xff1a 使用IDEA的git初始化仓库后 xff0c 提交到github空仓库时 xff0c 出现master分支无法和默认的main分支合并的情况 解决思路 xff1a 在已经有两个分支的情况下 xff0c 将两个分支克隆到
  • 常见算法题型,通常算法求解步骤

    算法题型 xff1a 排序 查找 字符串匹配 图 组合 几何 数值 算法求解步骤 xff1a xff08 仅仅为个人理解 xff09 1 分析问题 xff0c 建立模型 理解题目 xff0c 属于哪一类题型 xff0c 与哪类题型类似 2
  • Freertos学习

    FreeRtos小问题 初步了解FreeRTOS xff0c 学习原子哥的视频 遇到问题总结 xff1a 1 freertos的一个 start task 的子任务是不是同时运行的 xff1f 不是 xff0c CPU一次只能处理一个任务
  • vector的介绍及使用(12)

    目录 1 vector的介绍 2 vector的使用 1 vector的定义 2 vector的迭代器使用 3 vector空间增长问题 4 vector的增删查改 5 遍历 1 下标 43 遍历 2 迭代器遍历 3 范围for遍历 6 注
  • STM32F103最小系统图例

    一 STM32F103最小系统 1 最小系统的构成2 连接图3 电源电路4 复位电路5 时钟电路6 程序下载电路7 启动配置电路 1 最小系统的构成 单片机芯片 供电电路 时钟电路 复位电路 程序下载电路 启动配置电路 2 连接图 3 电源
  • T265学习之路(2)---T265源码下载及案例实验

    一 T265 源码下载 在安装好Realsense viewer进行测试后 xff0c 需要根据不同需求来读取传感器数据 xff0c 而想对T265入门 xff0c 对源码的解读和使用是最快也是最高效的学习方法 xff0c 因此先从Gith
  • 【cmake学习】cmake 引入第三方库(头文件目录、库目录、库文件)

    程序的编写需要用到头文件 xff0c 程序的编译需要lib文件 xff0c 程序的运行需要dll文件 xff0c 因此cmake引入第三方库其实就是将include目录 lib目录 bin目录引入工程 目录 1 find package x
  • T265学习之路(1)---环境搭配及Realsense_viewer安装

    T265学习入门参考了很多资料 xff0c 其中主要以这位博主的文章进行学习 xff0c 步骤和解答很详细 xff0c 再次感谢提供这么好的学习资料 xff0c 链接如下 xff1a 原创链接 个人学习路径如下 xff1a 一 安装步骤 1
  • T265学习之路(4)---realsense_ros安装及案例实现

    一 Realsense ros功能包的安装 1 1下载realsense ros源码 在Ros工作空间的src文件夹下输入命令 xff1a span class token function git span clone https git
  • 想进大厂必看的计算机类书单

    从大一开始 xff0c 我就很喜欢看各种各样的书 xff0c 不仅是技术的 xff0c 也有散文 越读感触越深 xff0c 发现书不在多 xff0c 而在于经典 xff0c 例如计算机传统黑皮书 xff0c CSAPP等等 你在不同时间读同
  • 数组

    数组 常用创建数组方式 xff1a span class token number 1 span 创建数组的同时 xff0c 制定数组中的内容 数据类型 span class token punctuation span span clas
  • Zookeeper的安装

    Zookeeper的安装 注意 xff1a 安装 zookeeper 前一定要先安装 jdk 在Linux上安装 装备一个本地虚拟机 xff0c 我使用的是 VMware Workstation 新建 CentOS7 的虚拟机 xff08
  • docker的安装

    安装docker 第 1 步 xff1a 将 yum 包更新到最新 xff0c 更新过程中出现输入的界面都输入 y 命令 xff1a yum update 出现 Complete span class token operator span
  • DOCKER 部署应用

    DOCKER 部署应用 DOCKER 部署应用 DOCKER 部署应用安装 Docker部署 MySQL部署 Tomcat部署 Redis 下面操作没有特别说明 xff0c 都是在虚拟机CentOS7上完成 安装 Docker 第 1 步
  • Docker部署ElasticSearch

    Docker部署ElasticSearch 默认docker已安装且启动 通过 dockerhup 官网查询docker内提供的 ElasticSearch 镜像 官网 xff1a https registry hub docker com
  • 酒旅项目总结

    项目里程碑 项目里程碑下图是项目原计划的时间线 项目技术架构 下面介绍各个技术 xff1a DNS xff08 Domain Name Server xff0c 域名服务器 xff09 是进行域名 domain name 和与之相对应的IP
  • MySQL环境搭建

    MySQL环境搭建 1 MySQL的下载 MySQL的4大版本 MySQL Community Server 社区版本 xff0c 开源免费 xff0c 自由下载 xff0c 但不提供官方技术支持 xff0c 适用于 大多数普通用户 MyS
  • 通过 SMOTE 及其变体过采样处理不平衡数据

    在这篇文章中 xff0c 我将解释使用 SMOTE SVM SMOTE BorderlineSMOTE K Means SMOTE 和 SMOTE NC 进行过采样 上采样 我将通过一个实际示例进行解释 xff0c 在该示例中我们应用这些方

随机推荐

  • SNMP错误记录:No more variables left in this MIB view (It is past the end of the MIB tree)

    MIB和OID对应关系查看命令 xff1a snmptranslate Tz m all SNMP测试 本地测试 xff1a snmpwalk v 2c c public 64 123 localhost 1 3 6 1 2 1 25 3
  • 一个Docker面试题目

    编写Dockerfile脚本编译镜像 xff0c 运行容器后实现对现有 mysql 数据库做备份 环境信息 xff1a mysql数据库地址192 168 0 10 端口 6600 用户 testuser 密码 123456 需要备份的数据
  • Windows程序设置自启动

    Windows程序设置自启动 在Windows系统中 有几种方法可以设置一个程序在系统启动时自动启动 将程序添加到开机启动文件夹 Win 43 R打开运行框 输入shell startup打开开机启动文件夹 然后将你想自动启动的程序快捷方式
  • Windows Server 程序设置自启动(用户不登录)

    Windows Server 程序设置自启动 xff08 用户不登录 xff09 在Windows Server中 想要在系统启动时自动启动一个程序 但不依赖用户登录 可以使用以下几种方法 将程序添加为服务 这是Windows Server
  • linux时间同步脚本

    linux时间同步脚本 span class token function bash span span class token comment bin bash span span class token comment 时间同步服务器
  • 华三网络设备查看命令

    华三网络设备查看命令 华三网络设备的配置和管理可以通过设备的管理地址进行 常用的页面有 状态监控 用于查看设备运行状态 CPU利用率 内存利用率 温度等信息接口配置 用于配置接口属性 如速率模式 DUPLEX模式 description等I
  • rsync 远程删除文件

    rsync 远程删除文件 rsync是一个强大的远程数据同步工具 它不仅可以实现远程文件复制 也可以实现远程文件删除 要使用rsync实现远程删除文件 可以使用如下命令 span class token function bash span
  • 华为openEuler 22.03 LTS系统的欢迎讯息

    华为欧拉系统的欢迎讯息 华为EulerOS系统中的欢迎讯息是通过 etc profile文件来定义和设置的 该文件会在用户登录后读取并执行 EulerOS的 etc profile文件中定义了prompt函数来设置PS1提示符 并通过PRO
  • bash的进程与欢迎讯息自定义

    在bash shell中 可以通过多种方式自定义欢迎讯息和提示符 主要有 修改 etc profile文件 该文件在用户登录后执行 定义了PROMPT COMMAND和PS1提示符 可以修改其内容实现自定义欢迎讯息和提示符 例如 修改为 s
  • 使用crontab命令同步时间

    crontab命令可以用于在Linux系统中定期同步时间 常用的时间同步方法有 1 使用ntpdate同步时间 可以添加如下crontab任务 5 usr sbin ntpdate time nist gov http xn 5time r
  • GitHub+ Docker Hub 拉取国外镜像

    一 背景 我们在拉取国外镜像 xff0c 例如在搭建 Kubernetes 的时候需要使用到来自于 Google xff1a gcr io google containers kube apiserver amd64 这样的镜像 xff0c
  • 如何熟悉weblogic

    要熟悉WebLogic 可以从以下几个方面入手 理解WebLogic的基本架构 WebLogic是Oracle的中间件产品 用于开发和部署企业级Java EE应用程序 它的基本架构由管理服务器 托管服务器和节点管理器组成 理解每个组件的作用
  • docker overlay2 是存放什么的?

    docker overlay2是Docker中的存储驱动之一 用于管理镜像和容器层的数据 它使用最小存储空间来存储像层这样的临时数据 overlay2本质上是多层存储驱动 它将镜像和容器层都视为独立的匿名临时文件系统 然后通过联合挂载将这些
  • Google浏览器下载地址

    官网下载 https www google cn chrome 旧版本下载地址 https www chromedownloads net chrome64win https www slimjet com chrome google ch
  • docker网卡的IP地址修改

    Docker容器启动后 默认会在主机上分配一个网卡 该网卡对应一个网络命名空间 并在这个网络命名空间下随机分配一个IP地址 如果想修改Docker容器的IP地址 有以下几种方法 修改Docker宿主机的Docker网络 可以在Docker主
  • SNMP连接失败

    SNMP连接失败常见的原因有以下几个 版本不匹配 SNMP有SNMPv1 SNMPv2c SNMPv3等版本 客户端和服务器版本必须匹配 否则会连接失败 需要确认客户端和服务器所支持的SNMP版本 选择一个双方都兼容的版本进行连接 社区名不
  • windows安装GO语言环境

    GO语言版本 Windows 平台和 Mac 平台推荐下载可执行文件版 xff0c Linux 平台下载压缩文件版 版本 xff1a 1 16 8 出现上面这个界面就说明已经安装好了 查看GO版本 可以打开终端窗口 xff0c 输入go v
  • 3par命令集

    3PAR是惠普公司的存储产品 它提供了基于CLI的管理终端来管理存储系统 主要的3PAR CLI命令有 show 显示系统信息 showsys 显示系统概况信息shownode 显示节点信息showport 显示端口信息showdisks
  • 华为欧拉系统RPM强制卸载libffi-devel

    查看欧拉系统有没有安装这个包 yum list span class token operator span span class token function grep span libffi devel 准备离线下载时 xff0c 发现
  • 最全Arrays.sort函数举例

    Arrays sort 的作用是对括号中的数组进行排序 xff0c 时间复杂度O xff08 n logn xff09 xff0c 方法返回值为void 是在原来数组的空间基础上进行升序排序 xff0c 因此不需要定义一个数组接收它 xff