Java基础(九)数组工具类

数组工具类


1. Arrays类

a. 导入方法

import java.util.Arrays;

b. Arrays类常用的方法

方法返回类型说明
equals(array1, array2)boolean比较两个数组是否相等
sort(array)void对数组 array 的元素进行排序
toString(array)String把一个数组 array 转换成一个字符串
fill(array, val)void把数组 array 的所有元素都赋值为 val
copyOf(array, length)与 array 数据类型一致把数组 array 复制成一个长度为 length 的新数组
binarySearch(array, val)int查询元素值 val 在数组 array 中的下标
compare(array1, array2)int按照字典顺序比较数组,前面的数组大,返回大于 0 的值,反之返回小于 0 的值
copyOfRange(arr, start, end)与 array 数组类型一致将指定数组的指定范围复制到新数组中
fill(arr, strats, end, val)void将指定值分配给指定数组的指定范围的每个元素
mismatch(array1, arrays2)int查找并返回两个数组之间第一个不匹配的索引,否则如果未找到不匹配,则返回 -1

2. Arrays类的应用

(1)比较两个数组是否相等

Arrays 类的 equals() 方法用于比较两个数组是否相等。只有当两个数组长度相等,对应位置也一一相等时,该方法返回 true ,否则返回 false。

import java.util.Arrays;public class Example19 {public static void main(String[] args) {// 比较两个数组是否相等int[] arr1 = {10, 20, 30};int[] arr2 = {10, 20, 30};int[] arr3 = {10, 20, 30};System.out.println(Arrays.equals(arr1,arr2));System.out.println(Arrays.equals(arr1,arr3));System.out.println(arr1.equals(arr2));System.out.println(arr1 == arr2);}
}
// true false false false

在这段代码中,Arrays.equals(arr1, arr2)调用 Arrays 类的静态方法来比较两个数组的内容是否相等。它会逐个比较两个数组对应位置的元素值是否相等,如果所有元素都相等,则返回 true。

arr1.equals(arr2)调用数组对象的 equals 方法来比较两个数组是否是同一个对象。由于数组是对象,使用 equals 方法默认会比较两个数组的引用地址是否相等。在这个例子中,arr1 和 arr2 是不同的数组对象,即使它们的内容相同,它们的引用地址不同,因此 arr1.equals(arr2) 返回的结果是 false。

arr1 == arr2直接比较两个数组的引用地址是否相等。同样地,arr1 和 arr2 是不同的数组对象,因此它们的引用地址也不相等,所以 arr1 == arr2 的结果是 false。

综上所述,Arrays.equals(arr1, arr2) 可以比较两个数组的内容是否相等,而 arr1.equals(arr2) 和 arr1 == arr2 比较的是数组对象的引用地址。因此,三者的结果不一样。

(2)对数组元素进行升序排序

Arrays 类的 sort() 对数组的元素进行升序排序。

import java.util.Arrays;
import java.util.Collections;public class Sort {public static void main(String[] args) {Integer[] arr = {5, 2, 8, 1, 9};// 升序排序Arrays.sort(arr);System.out.println("升序排序:" + Arrays.toString(arr));//降序排序Collections.reverse(Arrays.asList(arr));System.out.println("降序排序:" + Arrays.toString(arr));}
}
/*
升序排序:[1, 2, 5, 8, 9]
降序排序:[9, 8, 5, 2, 1]
*/
  • Arrays.aList() 是一个用于将数组转换为列表的方法。它接收一个数组作为参数,并返回一个固定大小的列表,该列表由给定的数组支持。
  • 需要注意的是,Arrays.asList() 返回的列表是一个固定大小的列表,意味着不能改变其大小(添加或删除元素),否则会抛出 UnsupportedOperationException 异常。因为底层仍然是原始数组,所以在使用该列表时,对数组的修改会直接反映到列表中,反之亦然。
  • Collections.reverse() 是一个用于反转列表元素顺序的方法。它接收一个列表作为参数,并修改该列表,使得列表中的元素按照相反的顺序排列。

(3)将数组元素赋值为相同的值

Arrays 类的 fill() 方法用于把数组 array 的一些或全部元素赋值为 val 。

import java.util.Arrays;public class FillExample {public static void main(String[] args) {int[] arr1 = {10, 10, 10, 10, 10};int[] arr2 = {10, 10, 10, 10, 10};// 全部赋值Arrays.fill(arr1, 50);System.out.println("arr1为" + Arrays.toString(arr1));// 部分赋值Arrays.fill(arr2, 1, 3, 30);System.out.println("arr2为" + Arrays.toString(arr2));}
}
/*
arr1为[50, 50, 50, 50, 50]
arr2为[10, 30, 30, 10, 10]
*/
  • 全部赋值
    • Arrays.fill(arr, val) 中,arr 为要赋值的数组,val 需要赋值的值。
  • 部分赋值
    • Arrays.fill(arr, fromIndex, toIndex, val) 中,arr 为要赋值的数组,val 需要赋值的值,fromIndex 为开始赋值的数组下标,toIndex 为结束赋值的数组下标(不包含该下标的值)。

(4)将数组赋值成一个长度为设定值的新数组,新数组内容复制

初始化一个整型一维数组,使用 Arrays 类的 copyOf() 方法把数组复制成一个长度为设定值的新数组。
初始化一个整型一维数组,使用 System 类的 arraycopy() 方法把数组复制成一个长度为设定值的新数组。

import java.util.Arrays;public class CopyOfExample {public static void main(String[] args) {int[] arr = {1, 2, 3 ,5, 7};// Arrays.copyOf() 复制数组// 复制新数组 newLength > arr.lengthint[] arr1 = Arrays.copyOf(arr,7);System.out.println("copyOf() arr1 = " + Arrays.toString(arr1));// 复制新数组 newLength = arr.lengthint[] arr2 = Arrays.copyOf(arr,5);System.out.println("copyOf() arr2 = " + Arrays.toString(arr2));// 复制新数组 newLength < arr.lengthint[] arr3 = Arrays.copyOf(arr,3);System.out.println("copyOf() arr3 = " + Arrays.toString(arr3));// System.arraycopy() 赋值int[] arr4 = new int[arr.length + 1];System.arraycopy(arr, 0, arr4, 0, 2);System.arraycopy(arr, 2, arr4, 3, 3);arr4[2] = 6;System.out.println("arraycopy() arr4 = " + Arrays.toString(arr4));}
}/* 输出
copyOf() arr1 = [1, 2, 3, 5, 7, 0, 0]
copyOf() arr2 = [1, 2, 3, 5, 7]
copyOf() arr3 = [1, 2, 3]
arraycopy() arr4 = [1, 2, 6, 3, 5, 7]
*/
  • Arrays.copyOf()
    • Arrays.copyOf(arr, newLength) 中,arr 为要复制的数组,newLength 为新建数组的长度。
    • 复制新数组 newLength > arr.length,用该数组类型的默认值填充。
    • 复制新数组 newLength = arr.length,新数组和原数组一样。
    • 复制新数组 newLength < arr.length,新数组赋值原数组的前 newLength 位。
  • System.arraycopy()
    • System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
    • src: 源数组,被复制的数组。
    • srcPos: 源数组的起始位置,从这一位开始复制。
    • dest: 目标数组。
    • destPos: 目标数组的位置。
    • length: 复制多少元素, 不能比 src.length 大。

(5)查询元素在数组中的下标

Arrays 类的 binarySearch(Object[], Object key) 方法用于查询数组元素在数组中的下标。调用该方法时要求数组中的元素已经按照升序排列

import java.util.Arrays;public class Learn1002 {public static void main(String[] args) {// binarySearch()函数int[] arr = {10, 50, 30, 40, 20};Arrays.sort(arr);System.out.println("arr = " + Arrays.toString(arr));// 查找元素在数组内int index = Arrays.binarySearch(arr,40);System.out.println("index = " + index);// 查找元素小于数组中最小值index = Arrays.binarySearch(arr, 0);System.out.println("index = " + index);// 查找元素在数组最小到最大值之间,但不在数组内index = Arrays.binarySearch(arr, 45);System.out.println("index = " + index);// 查找元素大于数组中最大值index = Arrays.binarySearch(arr, 60);System.out.println("index = " + index);}
}/* 
输出:
arr = [10, 20, 30, 40, 50]
index = 3
index = -1
index = -5
index = -6
*/

如果 key 在数组中,则返回搜索值的索引;如果 key 不在数组中,返回值为 -1- (插入点)。插入点的值有如下四种情况:

  • 搜索值是数组元素,从 0 开始计数,得搜索值的索引值
  • 搜索值不是数组元素,且在数组范围内,从 1 开始计数,得 “ - 插入点索引值”;
  • 搜索值不是数组元素,且大于数组内元素,索引值为 - (length + 1);
  • 搜索值不是数组元素,且小于数组内元素,索引值为 -1.

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

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

相关文章

获取接口的所有实现

一、获取接口所有实现类 方法1&#xff1a;JDK自带的ServiceLoader实现 ServiceLoader是JDK自带的一个类加载器&#xff0c;位于java.util包当中&#xff0c;作为 A simple service-provider loading facility。 &#xff08;1&#xff09;创建接口 package com.example.dem…

ArcGIS API for JavaScript 4.x 教程(四) 添加点、线和多边形

了解如何在地图中显示点、线和多边形图形。 图形是用于在地图或场景中显示点、线、多边形和文本的视觉元素。图形由几何图形、符号和属性组成&#xff0c;单击时可以显示弹出窗口。您通常使用图形来显示未连接到数据库&#xff08;即GPS位置&#xff09;的地理数据。 在本教程…

Springboot中拦截GET请求获取请求参数验证合法性

目录 目的 核心方法 完整代码 创建拦截器 注册拦截器 测试效果 目的 在Springboot中创建拦截器拦截所有GET类型请求&#xff0c;获取请求参数验证内容合法性防止SQL注入&#xff08;该方法仅适用拦截GET类型请求&#xff0c;POST类型请求参数是在body中&#xff0c;所以下面…

K8S资源管理方式

K8S资源管理方式 文章目录 K8S资源管理方式一、陈述式资源管理1.基础命令操作2.创建pod3.查看资源状态4.查看pod中的容器日志5.进入pod中的容器6.删除pod资源7.pod扩容8.项目生命周期管理&#xff08;创建-->发布-->更新-->回滚-->删除&#xff09;8.1创建services…

3.1 计算机网络和网络设备

数据参考&#xff1a;CISP官方 目录 计算机网络基础网络互联设备网络传输介质 一、计算机网络基础 1、ENIAC&#xff1a;世界上第一台计算机的诞生 1946年2月14日&#xff0c;宾夕法尼亚大学诞生了世界上第一台计算机&#xff0c;名为电子数字积分计算机&#xff08;ENIAC…

准确率、召回率和F1数值区别

目录 准确率、召回率和F1数值 准确率、召回率和F1数值 一、准确率与召回率(Precision & Recall) 准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。 其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准…

【Autolayout案例02-距离四周边距 Objective-C语言】

一、好,来看第二个案例 1.第二个案例,是什么意思呢,第二个案例,要求屏幕中间,有一个UIView UIView,是个红色的UIView UIView的大小,我不限定 但是无论你是什么屏幕下 这个UIView距离上边,始终是50 距离右边,始终是50, 距离下边,始终是50, 距离左边,始终是5…

Nginx跳转模块——location与rewrite

一、location 1、location作用 用于匹配uri&#xff08;文件、图片、视频&#xff09; uri&#xff1a;统一资源标识符。是一种字符串标识&#xff0c;用于标识抽象的或物理资源文件、图片、视频 2、locatin分类 1、精准匹配&#xff1a;location / {...} 2、一般匹配&a…

PROFINET转DeviceNet网关普通网线能代替profinet吗

捷米JM-DNT-PN这款神器&#xff0c;连接PROFINET和DeviceNet网络&#xff0c;让两边数据轻松传输。 这个网关不仅从ETHERNET/IP和DEVICENET一侧读写数据&#xff0c;还可以将缓冲区数据交换&#xff0c;这样就可以在两个网络之间愉快地传递数据了&#xff01;而且&#xff0c;…

虚幻引擎游戏开发过程中,游戏鼠标如何双击判定?

UE虚幻引擎对于游戏开发者来说都不陌生&#xff0c;市面上有47%主机游戏使用虚幻引擎开发游戏。作为是一款游戏的核心动力&#xff0c;它的功能十分完善&#xff0c;囊括了场景制作、灯光渲染、动作镜头、粒子特效、材质蓝图等。本文介绍了虚幻引擎游戏开发过程中游戏鼠标双击判…

CSDN付费专栏写作协议

一、总则 1.1、欢迎您选用CSDN付费专栏服务&#xff08;“本服务”&#xff09;。以下所述条款和条件即构成您与CSDN就使用本服务所达成的协议&#xff08;“本协议&#xff09;。本协议被视为《CSDN用户服务条款》&#xff08;链接&#xff1a;https://passport.csdn.net/ser…

springboot+mybatis实现简单的增、删、查、改

这篇文章主要针对java初学者&#xff0c;详细介绍怎么创建一个基本的springboot项目来对数据库进行crud操作。 目录 第一步&#xff1a;准备数据库 第二步&#xff1a;创建springboot项目 方法1&#xff1a;通过spring官网的spring initilizer创建springboot项目 方法2&am…

JavaScript基础 第三天

1.for循环 2.数组的基本使用和操作 3.数组排序 一.for循环 ① 语法&#xff1a;把声明起始值&#xff0c;循环条件&#xff0c;变量值写到一起&#xff0c;让人一目了然 for(变量起始值;终止条件;变量变化量) {// 循环体 }举例&#xff1a; for (let i 0; i < 100; i)…

SQL SERVER ip地址改别名

SQL server在使用链接服务器时必须使用别名&#xff0c;使用ip地址就会把192.188.0.2这种点也解析出来 解决方案&#xff1a; 1、物理机ip 192.168.0.66 虚拟机ip 192.168.0.115 2、在虚拟机上找到 C:\Windows\System32\drivers\etc 下的 &#xff08;我选中的文件&a…

批量打印-----jsPDF将图片转为pdf,并合并pdf

注意一、 使用jspdf将图片&#xff08;jpg/jpeg/png/bmp&#xff09;转pdf&#xff08;记为pdfA&#xff09;&#xff0c;得到的pdf&#xff08;pdfA&#xff09;和需要合并的pdf(记为pdfB)类型不一致&#xff0c;需要将pdfA转为pdfB类型&#xff0c;才能合并&#xff0c;使用a…

C#与C/C++交互(1)——需要了解的基础知识

【前言】 C#中用于实现调用C/C的方案是P/Invoke&#xff08;Platform Invoke&#xff09;&#xff0c;让托管代码可以调用库中的函数。类似的功能&#xff0c;JAVA中叫JNI&#xff0c;Python中叫Ctypes。 常见的代码用法如下&#xff1a; [DllImport("Test.dll", E…

修改IDEA的idea.vmoptions参数导致IDEA无法打开(ReservedCodeCacheSize)

事发原因 Maven导依赖的时候OOM&#xff0c;因此怀疑是内存太小&#xff0c;尝试修改idea.vmoptions的参数&#xff0c;然后发现IDEA重启后打不开了&#xff0c;卸载重装后也无法打开。。。 实际上如果导包爆出OOM的话应该调整下图参数&#xff0c;不过这都是后话了 解决思路…

【从零开始学习JAVA | 第四十四篇】TCP协议中的握手与挥手

前言&#xff1a; TCP&#xff08;传输控制协议&#xff09;作为计算机网络中的重要协议&#xff0c;扮演着确保数据可靠传输的角色。在TCP的通信过程中&#xff0c;握手与挥手问题是不可忽视的关键环节。握手是指在建立连接时&#xff0c;客户端与服务器相互确认彼此的身份并…

【学习FreeRTOS】第1章——FreeRTOS入门

1.裸机与RTOS介绍 1.1.裸机与RTOS引入&#xff08;举例&#xff09; 设定情景&#xff1a;小明同学一边打游戏一边恢复女友消息&#xff0c;中途突然肚子疼要上医院 裸机的抽象表达 当紧急情况时&#xff0c;如果当前正在打游戏&#xff0c;那么小明只能打游戏和回复信息的流…

Spring 事务管理

目录 1. 事务管理 1.1. Spring框架的事务支持模型的优势 1.1.1. 全局事务 1.1.2. 本地事务 1.1.3. Spring框架的一致化编程模型 1.2. 了解Spring框架的事务抽象&#xff08;Transaction Abstraction&#xff09; 1.2.1. Hibernate 事务设置 1.3. 用事务同步资源 1.3.1…