Java数组Arrays操作全攻略
Arrays类的概述
Java中的Arrays
类位于java.util
包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。
常用成员方法及代码示例
排序(sort)
对数组进行升序排序(基本类型采用快速排序,对象类型采用归并排序)。
int[] numbers = {5, 2, 9, 1, 5};
Arrays.sort(numbers); // 排序后:[1, 2, 5, 5, 9]
System.out.println(Arrays.toString(numbers));
对对象数组排序(需实现Comparable
接口或传入Comparator
):
String[] names = {"John", "Alice", "Bob"};
Arrays.sort(names); // 按字典序排序
System.out.println(Arrays.toString(names));
二分查找(binarySearch)
前提:数组必须已排序。返回找到元素的索引(未找到时返回负数)。
int[] sortedArr = {1, 3, 5, 7, 9};
int index = Arrays.binarySearch(sortedArr, 5); // 返回2
System.out.println("Index of 5: " + index);
填充(fill)
将数组的所有元素设置为指定值。
char[] chars = new char[5];
Arrays.fill(chars, 'A'); // ['A', 'A', 'A', 'A', 'A']
System.out.println(Arrays.toString(chars));
数组转字符串(toString)
格式化数组为可读字符串。
double[] doubles = {1.1, 2.2, 3.3};
System.out.println(Arrays.toString(doubles)); // [1.1, 2.2, 3.3]
比较数组(equals)
判断两个数组内容是否相同(包括元素顺序)。
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println(Arrays.equals(arr1, arr2)); // true
拷贝数组(copyOf/copyOfRange)
copyOf
:从原数组的起始位置拷贝指定长度。
copyOfRange
:拷贝指定范围(左闭右开)。
int[] original = {10, 20, 30, 40, 50};
int[] copy1 = Arrays.copyOf(original, 3); // [10, 20, 30]
int[] copy2 = Arrays.copyOfRange(original, 1, 4); // [20, 30, 40]
深度操作(deepEquals/deepToString)
用于多维数组或嵌套对象数组的比较和打印。
int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true
System.out.println(Arrays.deepToString(matrix1)); // [[1, 2], [3, 4]]
高级应用示例
将数组转换为列表(asList
):
String[] fruits = {"Apple", "Banana", "Orange"};
List<String> list = Arrays.asList(fruits); // 返回固定大小的列表
System.out.println(list);
注意:此方法返回的列表不支持增删操作(会抛出UnsupportedOperationException
)。
并行排序(parallelSort
):
int[] largeArray = new int[100000];
// 使用多线程并行排序(大数据量时效率更高)
Arrays.parallelSort(largeArray);
实例:
public class test1_Arrays {public static void main(String[] args) {/*public static String toString(数组) 把数组拼接成一个字符串public static int binarySearch(数组,查找的元素) 二分查找法查找元素public static int[] copyOf(原数组,新数组长度) 拷贝数组public static int[] copyOfRange(原数组,起始索引,结束索引) 拷贝数组(指定范围)public static void fill(数组,元素) 填充数组public static void sort(数组) 按照默认方式进行数组排序public static void sort(数组,排序规则) 按照指定的规则排序*///toString: 将数组变成字符串System.out.println("-----------toString-------------");int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]//binarySearch:二分查找法查找元素//细节1:二分查找的前提:数组中的元素必须是有序,数组中的元素必须是升序的//细节2:如果要查找的元素是存在的,那么返回的是真实的索引//但是,如果要查找的元素是不存在的,返回的是--插入点 - 1//疑问:为什么要减1呢?//解释:如果此时,我现在要查找数字0,那么如果返回的值是-插入点,就会出现问题了。//如果要查找数字0,此时0是不存在的,但是按照上面的规则--插入点,应该就是-0//为了避免这样的情况,Java在这个基础上又减一。System.out.println("-----------binarySearch-------------");System.out.println(Arrays.binarySearch(arr, 10));//9System.out.println(Arrays.binarySearch(arr, 21));//-1System.out.println(Arrays.binarySearch(arr, 0));//-11//copyOf:拷贝数组//参数一:老数组//参数二:新数组的长度//方法的底层会根据第二个参数来创建新的数组//如果新数组的长度是小于老数组的长度,会部分拷贝//如果新数组的长度是等于老数组的长度,会完全拷贝//如果新数组的长度是大于老数组的长度,会补上默认初始化值System.out.println("-----------copyOf-------------");int[] newArr1 = Arrays.copyOf(arr, 10);System.out.println(Arrays.toString(newArr1));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]//copyOfRange:拷贝数组(指定范围)//细节:包头不包尾,包左不包右System.out.println("-----------copyOfRange-------------");int[] newArr2 = Arrays.copyOfRange(arr, 0, 9);System.out.println(Arrays.toString(newArr2));//[1, 2, 3, 4, 5, 6, 7, 8, 9]//fill:填充数组System.out.println("-----------fill-------------");Arrays.fill(arr, 100);System.out.println(Arrays.toString(arr));//sort:排序。默认情况下,给基本数据类型进行升序排列。底层使用的是快速排序。System.out.println("-----------sort-------------");int[] arr2 = {10, 2, 3, 5, 6, 1, 7, 8, 4, 9};Arrays.sort(arr2);System.out.println(Arrays.toString(arr2));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
}
public class test2_Arrays {public static void main(String[] args) {/*public static void sort(数组,排序规则) 按照指定的规则排序参数一:要排序的数组参数二:排序的规则细节:只能给引用数据类型的数组进行排序如果数组是基本数据类型的,需要变成其对丁的包装类*/Integer[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};//第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则。//但是这个实现类,我只要使用一次,所以就没有必要单独的去写一个类,直接采取匿名内部类的方式就可以了//底层原理://利用插入排序 + 二分查找的方式进行排序的。//默认把@索引的数组当做是有序的序列,1索引到最后认为是无序的序列。//把无序的序列得到里面的每一个元素,假设当前遍历得到的元素是A元素//在有序序列中进行插入,在插入的时候,是利用二分查找确定A元素的插入点。//拿着A元素,跟插入点的元素进行比较,比较的规则就是compare方法的方法体//如果方法的返回值是负数,拿着A继续跟前面的数据进行比较//如果方法的返回值是正数,拿着A继续跟后面的数据进行比较//如果方法的返回值是0,也拿着A跟后面的数据进行比较//直到能确定A的最终位置为止。//compare方法的形式参数://参数一:o1:表示在无序序列中,遍历得到的每一个元素//参数二:o2:有序序列中的元素//返回值://负数:表示当前要插入的元素是小的,放在前面//正数:表示当前要插入的元素是大的,放在后面//0:表示当前要插入的元素跟现在的元素是一样的,他们也会放在后面//简单理解://o1 - o2 : 升序排列//o2 - o1 : 降序排列//Integer[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};Arrays.sort(arr, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {System.out.println("-------------");System.out.println("o1 : " + o1);System.out.println("o2 : " + o2);return o1 - o2;}});System.out.println(Arrays.toString(arr));}
}
通过灵活组合这些方法,可以高效处理数组相关的常见任务。
相关文章:

Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...

rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...

高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...

负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...

算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...

leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...

Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...

[拓扑优化] 1.概述
常见的拓扑优化方法有:均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有:有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

Linux-进程间的通信
1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...

DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor
1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...