Arrarys类的相关细节与知识点

news2024/11/30 3:24:01

Arrarys类在Java中存储了一些对数组操作的一些方法,比如Sort(),toString,BinarySearch(),copyof(),fill(),equals(),aList这几种方法,这里面最重要的可能就是Sort()方法,它可以将数组进行排序当然对数组的排序我们之前也学了一个冒泡排序法,也是完全可以使用的,Sort()方法也可以将数组进行排序但是是通过什么代码进行对数组的排序操作的到时候我们会看一下源码,剩下 的方法其实也是比较好懂待会给大家演示一下即可。

toString方法其实没啥好说的就是把数组以字符串的形式输出,BinarySearch(),这个方法比较特别它是二叉排序查找,你必须将数组先排序好才能使用该方法,我们来看一下不排序的后果是什么:
 

import java.util.Arrays;
public class Array {
    public static void main(String[] args) {
        Integer[] arr = {1,2,5,3,4};
        int index = Arrays.binarySearch(arr, 3);
        System.out.println(index);
    }
}

这里我们并没有对数组进行排序操作我们这里搜索索引为3的数,按照数组的位置看应该是3,我们来看一下结果是什么

结果却是也跟我们预期的一样并不是3而是-3。

排序过后的会不会正确这里我就先不演示了,感兴趣的朋友可以去尝试一下,copyof()方法顾名思义就是将旧数组完完全全的复制给新数组,fill()这个方法其实就是将数组中的元素按照数组的长度全部替换成指定元素,equals()这个方法我们之前也是聊过的,就是比较的方法,在这里就是数组之间的比较,两个数组完全一样则返回true,不同则返回false(这里的顺序也是必须是一致的,顺序不一致也是返回false),接下来我们重点讲一下Sort()方法的细节和使用

Sort()方法我们之前说的是排序,但是它是正排序还是倒排序我们就来了解一下,但是如果我们想按照自己的排序方法又该怎么办,接下来给大家进行详细分析:

import java.util.Arrays;

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

}

这里我们直接使用默认的sort()这个方法对我们的数组进行遍历,输出数组的时候一定要注意要么遍历数组,要么使用Arrarys的toString()方法,否则输出的是默认的地址段,这里我们看一下输出的结果是正排序

当然你也可以使用冒泡排序法来进行排序,而且冒泡排序法也是可以自主的调换自己想要的排序方法,这个大家应该都是了解的,接下来我们就要来将一个接口方法也是Arrarys的sort()的一个重载方法,这里我们应用的接口名为Comparator这是我们Java中的一个比较器,我们待会在进行排序的时候我们会看源码,那我们不传入接口参数的时候是怎么进行比较的我们来看一下。

这里我们发现没有传入比较器的话,代码会自动会自动的调用默认的比较器,进行默认的排序,

这里我们 也可以传入比较器:

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

public class aaa {
    public static void main(String[] args) {
        int[] arr = {1, -3, 34, 20, -7};
        System.out.println(Arrays.toString(arr));
        //这里使用匿名内部类的方式
        bulle1(arr, new Comparator(){
            @Override
            public int compare(Object o1, Object o2) {
                int n1 = (Integer) o1;
                int n2 = (Integer) o2;
                return n2 - n1;//通过返回值的正负来确定排序顺序。
            }
        });
        System.out.println(Arrays.toString(arr));
    }
    //这里我们默认设置的比较器是通过冒泡排序的方式进行排序
    //不同的是它的比较大小的方法不同,它通过c.compare()通过动态绑定自动定位到c中的compare这个方法
    public static void bulle1(int[] arr, Comparator c){
        int temp = 0;
        for (int i = 0; i < arr.length - 1 ; i++) {
            for(int j = 0; j < arr.length - i - 1; j++){
                if (c.compare(arr[j],arr[j + 1]) > 0){
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}

这里我们首先得知道冒泡排序到底是如何实现对数组进行排序的,如果这个原理不知道,自定义的比较器的执行是比较困难的,也建议大家先去了解一下冒泡排序的原理,这里我们使用匿名内部类的方式传入我们的比较器的原因是因为这样比较方便不需要进行实现接口的操作,而且可以随时修改自己想要的代码,在我们测试代码的时候尽量的不要去修改原代码,所以这也是匿名内部类在源码中广泛出现的原因。这里我们给大家看一下俩种结果

1.正排序:

即return n1 - n2

2.倒排序:

即return n2 - n1

这里就是全部内容,大家可以试着DeBug一下看看在c.compare()的时候会不会动态绑定到我们的匿名内部类的方法上,如果大家对这个返回值定排列顺序还是不理解的话,你可以试着这么理解:

俩组完全相同的数比较,但是返回值是相反的就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290760.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AWS 日志分析工具

当您的网络资源托管在 AWS 中时&#xff0c;需要定期监控您的 AWS CloudTrail 日志、Amazon S3 服务器日志和 AWS ELB 日志等云日志&#xff0c;以降低任何潜在的安全风险、识别严重错误并确保满足所有合规性法规。 什么是 Amazon S3 Amazon Simple Storage Service&#xff…

汽车网络安全--ISO\SAE 21434解析(二)

1.风险评估方法 书接上文,我们正式开始对车灯系统的TARA分析,首先回顾下整车关于车灯系统描述: 可以比较肯定的是,我们定义的item为车灯系统,因此可以看到上图中画出了item boundary;同时定义出运行环境,个人理解,这块就是为TARA分析提供足够的环境支撑,不管是直接还…

RabbitMQ创建新用户,并给用户添加角色和授权

一、进入容器 1.1 查看运行容器的详细信息 docker ps -a1.2 进入容器命令 docker exec -it 容器ID /bin/bash 或 docker exec -it 容器name bash 1.3 退出容器命令 exit 或者 CtrlQP 二、操作RabbitMQ 2.1 查看用户列表 注:先进入到容器内部 rabbitmqctl list_user…

区块链媒体:Web3.015个方法解析-华媒舍

Web3.0是第三代互联网的发展阶段&#xff0c;相较于Web2.0&#xff0c;它具有更高的可信性、安全性和去中心化特点。在Web3.0时代&#xff0c;推广变得更为重要&#xff0c;因为吸引用户和提高品牌知名度对于在竞争激烈的市场中脱颖而出至关重要。本文将揭秘推广Web3.0的15个秘…

短视频购物系统源码:构建创新购物体验的技术深度解析

短视频购物系统作为电商领域的新宠&#xff0c;其背后的源码实现是其成功的关键。本文将深入探讨短视频购物系统的核心技术和源码设计&#xff0c;以揭示其如何构建创新购物体验的技术奥秘。 1. 技术架构与框架选择 短视频购物系统的源码首先考虑的是其技术架构。常见的选择…

Hazelcast分布式内存网格(IMDG)基本使用,使用Hazelcast做分布式内存缓存

文章目录 一、Hazelcast简介1、Hazelcast概述2、Hazelcast之IMDG3、数据分区 二、Hazelcast配置1、maven坐标2、集群搭建&#xff08;1&#xff09;组播自动搭建 3、客户端4、集群分组5、其他配置 三、Hazelcast分布式数据结构1、IMap2、IQueue&#xff1a;队列3、MultiMap4、I…

JavaWeb(十)

一、JavaWeb概述 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 JavaWeb&#xff1a;使用 Java技术进行web互联网开发。 二、JavaWeb 技术栈 2.1、B/S 架构 B/S 架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器…

怎么查看Linux还有多少磁盘空间可用

2023年12月6日&#xff0c;周三晚上 要查看 Linux 系统上还有多少磁盘空间可用&#xff0c;可以使用 df 命令。该命令能够显示文件系统的磁盘空间使用情况。 在终端中输入以下命令即可查看磁盘空间使用情况&#xff1a; df -h其中&#xff0c;-h 参数用于以易读的方式显示磁盘…

unity 2d 入门 飞翔小鸟 飞翔动作动画描点(六)

1、创建文件夹新建动画控制器 右键->create->Animator controer 给图层创建动画 把创建后的动画控制器拖拽至对应图层 点击window->Animation->Animation 点击创建文件夹 把图片拖拽到这里面&#xff0c;就可以了 然后我们就看在player看到已经把动作挂上去 点…

算法通关村第十七关-白银挑战贪心算法高频题目

大家好我是苏麟 , 今天说说贪心算法的高频题目 . 大纲 区间问题判断区间是否重叠合并区间插入区间 区间问题 判断区间是否重叠 描述 : 给定一个会议时间安排的数组 intervals &#xff0c;每个会议时间都会包括开始和结束的时间intervalsl[i] [start, end] &#xff0c;请你…

思维模型 心理防御机制

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。用幻想保护自己。 1 心理防御机制的应用 1.1 以下是心理防御机制在人际关系中的应用 1 心理防御机制的正向使用 小明在一次重要的演讲中犯了一个错误&#xff0c;他感到非常尴尬和失落。…

智能优化算法应用:基于非洲秃鹫算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于非洲秃鹫算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于非洲秃鹫算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.非洲秃鹫算法4.实验参数设定5.算法结果6.参考…

unity 2d 入门 飞翔小鸟 场景淡入淡出功能(三)

1、在图层新建个空的图层 场景2 2创建c#脚本 脚本创建好后&#xff0c;将脚本推拽进空白图层里面&#xff0c;将黑色图片拉进去脚本的参数里面&#xff0c;如上面最后一张图&#xff0c;两个切换的场景都要进行上述操作 using System.Collections; using System.Collection…

计算机图形图像技术(OpenCV核心功能、图像变换与图像平滑处理)

一、实验原理&#xff1a; 1、显示图像 void imshow(const string &name, InputArray image); ①功能&#xff1a;在指定窗口中显示图像。 ②参数&#xff1a;name为窗口的名字&#xff1b;image为待显示的图像。 ③说明&#xff1a;可显示彩色或灰度的字节图像和浮点数图…

深入理解MySQL事务隔离级别与锁机制

表锁&#xff1a; 行锁&#xff1a; InnoDB和MyISAM最大的不同有两点&#xff1a; InnoDB支持事务&#xff08;TRANSACTION&#xff09;InnoDB支持行锁 MyISAM在执行查询SELECT前&#xff0c;会自动给涉及的所有表加读锁&#xff0c;在执行update、insert、delete操作会自动…

【计算机二级MS Office】word(上)

这里写目录标题 文件选项卡保存和另存为属性检查文档 开始选项卡字体更改字体和字号设置中文和英文为两种不同字体的快捷方式介绍其余图标文本效果突出颜色如何挑选字体颜色字符底纹带圈字符字体对话框&#xff08;隐藏&#xff09; 段落 插入选项卡设计选项卡布局选项卡引用选…

HarmonyOS4.0从零开始的开发教程08构建列表页面

HarmonyOS&#xff08;六&#xff09;构建列表页面 List组件和Grid组件的使用 简介 在我们常用的手机应用中&#xff0c;经常会见到一些数据列表&#xff0c;如设置页面、通讯录、商品列表等。下图中两个页面都包含列表&#xff0c;“首页”页面中包含两个网格布局&#xff…

鸿蒙一出,android开发处境再受重创

华为宣布其自研操作系统鸿蒙HarmonyOSNEXT开发者预览版将不再兼容安卓系统&#xff0c;这一消息引起了广泛关注和热议。这一决策标志着华为正式告别安卓&#xff0c;摆脱了外部的制约&#xff0c;开始着手打造一个全新的生态系统。 鸿蒙系统4发布一个月&#xff0c;截至目前&a…

Ubuntu 20.04 安装 mysql8 LTS

Ubuntu 20.04 安装 mysql8 LTS sudo apt-get update sudo apt-get install mysql-server mysql --version mysql Ver 8.0.35-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu)) Ubuntu20.04 是自带了 MySQL8. 几版本的&#xff0c;低于 20.04 则默认安装是 MySQL5.7.33 s…

【Python】logging模块函数详解和示例

在Python中&#xff0c;LOGGER通常是指一个用于记录日志的模块或对象。它可以帮助你在程序中跟踪和记录事件&#xff0c;以便于调试、错误跟踪和日志分析。Python的标准库中包含了一个名为logging的模块&#xff0c;它提供了一个灵活且功能强大的日志记录系统。本文对相应的函数…