Java学习教程,从入门到精通,Java数组(Arrays)语法知识点及案例(19)
1、Java数组(Arrays)语法知识点及案例
一、数组的基本概念
数组是多个相同类型的数据按照一定的顺序排列的集合,使用一个名字命名,通过编号(索引)的方式对这些数据进行统一管理。数组是引用数据类型,数组的元素可以是任意类型。数组一旦初始化,长度则不能更改。
二、数组的分类
- 维度分:一维数组、二维数组、多维数组
- 元素分:基本数据类型元素数组、引用数据类型元素数组
三、一维数组
- 数组的声明和初始化
- 静态初始化:数组的初始化和数组元素的赋值操作同时进行。
- 动态初始化:数组的初始化和数组元素的赋值操作分开进行。
// 静态初始化
int[] id = {1001, 1002, 1003, 1004};// 动态初始化
String[] name = new String[5];
- 调用数组指定位置的元素
通过索引方式调用,数组的索引从0开始,到(长度-1)结束。
// 调用数组name的第1个元素(索引为0)
name[0] = "Alice";
- 获取数组的长度
// 获取数组name的长度
int length = name.length; // 5
- 遍历数组
// 使用for循环遍历数组name
for (int i = 0; i < name.length; i++) {System.out.println(name[i]);
}
- 数组元素默认初始化值
- 基本数据类型数组:默认初始化值为0(整数类型)、0.0(浮点类型)、false(布尔类型)、‘\u0000’(字符类型)。
- 引用数据类型数组:默认初始化值为null。
四、多维数组
- 二维数组的初始化
- 静态初始化
int[][] arr1 = {{1, 2, 3},{4, 5},{6, 7, 8}
};
- 动态初始化
String[][] arr2 = new String[3][2];
- 调用二维数组指定位置的元素
// 调用二维数组arr1的第1行第2列的元素(索引为[0][1])
int value = arr1[0][1]; // 2
- 获取二维数组的长度
// 获取二维数组arr1的外层长度(行数)
int outerLength = arr1.length; // 3// 获取二维数组arr1的第1行的内层长度(列数)
int innerLength = arr1[0].length; // 3
- 遍历二维数组
// 使用嵌套for循环遍历二维数组arr1
for (int i = 0; i < arr1.length; i++) {for (int j = 0; j < arr1[i].length; j++) {System.out.print(arr1[i][j] + " ");}System.out.println();
}
五、Arrays类中的常用方法
- copyOf
- 用于复制数组,返回一个新数组,其长度为指定长度,元素为原数组的值。
int[] arr5 = {7, 8, 9};
int[] arr6 = Arrays.copyOf(arr5, 5);
System.out.println(Arrays.toString(arr6)); // [7, 8, 9, 0, 0]
- sort
- 对数组进行排序。
int[] arr3 = {5, 4, 6};
Arrays.sort(arr3);
System.out.println(Arrays.toString(arr3)); // [4, 5, 6]
- binarySearch
- 使用二分查找算法查找元素的下标,要求数组已经按升序排列。
int[] arr7 = {1, 2, 3, 4, 5};
Arrays.sort(arr7);
int index = Arrays.binarySearch(arr7, 3);
System.out.println(index); // 2
- fill
- 将数组的所有元素设置为指定值。
String[] arr4 = {"你", "好"};
Arrays.fill(arr4, "小维");
System.out.println(Arrays.toString(arr4)); // [小维, 小维]
- equals
- 比较两个数组是否相等。
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
boolean isEqual = Arrays.equals(arr1, arr2);
System.out.println(isEqual); // true
- toString
- 将数组转换为字符串。
int[] arr = {1, 2, 3};
String str = Arrays.toString(arr);
System.out.println(str); // [1, 2, 3]
六、综合案例
public class ArrayDemo {public static void main(String[] args) {// 一维数组int[] numbers = {1, 2, 3, 4, 5};System.out.println("一维数组:");for (int number : numbers) {System.out.print(number + " ");}System.out.println();// 二维数组int[][] matrix = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};System.out.println("二维数组:");for (int[] row : matrix) {for (int element : row) {System.out.print(element + " ");}System.out.println();}// Arrays类的使用int[] arr1 = {7, 8, 9};int[] arr2 = Arrays.copyOf(arr1, 5);System.out.println("复制后的数组:" + Arrays.toString(arr2));int[] arr3 = {5, 3, 8, 6, 2};Arrays.sort(arr3);System.out.println("排序后的数组:" + Arrays.toString(arr3));int index = Arrays.binarySearch(arr3, 6);System.out.println("元素6的下标:" + index);String[] arr4 = {"a", "b", "c"};Arrays.fill(arr4, "x");System.out.println("填充后的数组:" + Arrays.toString(arr4));int[] arr5 = {1, 2, 3};int[] arr6 = {1, 2, 3};boolean isEqual = Arrays.equals(arr5, arr6);System.out.println("数组是否相等:" + isEqual);}
}
以上内容涵盖了Java数组的基本语法知识点,并通过具体案例和详细注释展示了如何使用这些知识点。
在Java中,数组是一种重要的数据结构,用于存储固定大小的同类型元素集合。Java标准库提供了Arrays
类,其中包含了一系列用于操作数组的静态方法。以下是Java数组中常用的操作函数及其功能介绍:
-
排序(Sort)
Arrays.sort(T[] a)
:对指定数组按其元素的自然顺序进行升序排序。此方法适用于所有实现了Comparable
接口的元素类型。Arrays.sort(T[] a, int fromIndex, int toIndex)
:对指定数组的指定范围进行排序。Arrays.sort(T[] a, Comparator<? super T> c)
:根据指定比较器产生的顺序对数组进行排序。
-
搜索(Search)
Arrays.binarySearch(T[] a, T key)
:使用二分查找算法在已排序数组中查找指定元素的下标。如果找到,则返回其索引;如果未找到,则返回负值,其绝对值是第一个大于关键字的元素索引减一(如果关键字小于所有元素,则返回-length-1)。Arrays.binarySearch(T[] a, int fromIndex, int toIndex, T key)
:在指定范围内进行二分查找。
-
复制(Copy)
Arrays.copyOf(T[] original, int newLength)
:复制指定数组,并调整新数组的长度。如果新长度大于原数组长度,则新数组中的新元素将被设置为null
(对于对象数组)或0
(对于基本类型数组)。Arrays.copyOfRange(T[] original, int from, int to)
:复制指定数组范围的元素到新数组。from
是起始索引(包含),to
是结束索引(不包含)。
-
填充(Fill)
Arrays.fill(T[] a, T val)
:将指定值分配给指定数组的每个元素。Arrays.fill(T[] a, int fromIndex, int toIndex, T val)
:将指定值分配给指定数组范围的每个元素。
-
比较(Equals)
Arrays.equals(T[] a, T[] a2)
:如果两个数组长度相同且内容相同,则返回true
;否则返回false
。
-
转换为字符串(ToString)
Arrays.toString(T[] a)
:返回指定数组内容的字符串表示形式。
以下是一些使用上述函数的示例代码:
import java.util.Arrays;public class ArrayOperations {public static void main(String[] args) {// 排序Integer[] numbers = {5, 3, 8, 6, 2};Arrays.sort(numbers);System.out.println("排序后的数组:" + Arrays.toString(numbers));// 搜索int index = Arrays.binarySearch(numbers, 6);System.out.println("元素6的下标:" + index);// 复制Integer[] copy = Arrays.copyOf(numbers, numbers.length + 2);System.out.println("复制后的数组:" + Arrays.toString(copy));// 填充Arrays.fill(copy, copy.length - 2, copy.length, 99);System.out.println("填充后的数组:" + Arrays.toString(copy));// 比较Integer[] arr1 = {1, 2, 3};Integer[] arr2 = {1, 2, 3};boolean isEqual = Arrays.equals(arr1, arr2);System.out.println("数组是否相等:" + isEqual);// 转换为字符串String str = Arrays.toString(arr1);System.out.println("数组转换为字符串:" + str);}
}
以上代码展示了如何使用Java数组中的常用操作函数进行排序、搜索、复制、填充、比较和转换为字符串等操作。这些函数使得数组操作更加简洁和高效。
当然可以,以下是一些具体的Java数组操作案例:
一、数组遍历
public class ArrayTraversal {public static void main(String[] args) {int[] arr = {10, 21, 18, 12, 22};System.out.println("数组中元素个数:" + arr.length);for (int i = 0; i < arr.length; i++) {System.out.println("arr[" + i + "]=" + arr[i]);}}
}
二、数组求和
public class ArraySum {public static void main(String[] args) {int[] arr = {23, 11, 25, 88, 45, 22, 88};int sum = add(arr);System.out.println("sum=" + sum);}public static int add(int[] arr) {int sum = 0;for (int x = 0; x < arr.length; x++) {sum = sum + arr[x];}return sum;}
}
三、数组求最值
public class ArrayMax {public static void main(String[] args) {int[] arr = {23, 55, 55, 45, 90, 11};int max = getMax(arr);System.out.println("max=" + max);}public static int getMax(int[] arr) {int max = arr[0];for (int x = 1; x < arr.length; x++) {if (arr[x] > max) {max = arr[x];}}return max;}
}
四、数组排序
以下是几种常见的数组排序方法:
- 冒泡排序
public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}
}
- 选择排序
public class SelectionSort {public static void selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {int minIndex = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}
}
五、数组查找
- 线性查找
public class SequentialSearch {public static void main(String[] args) {int[] arr = {45, 62, 15, 62, 78, 30};int index = sequentialSearch(arr, 62);System.out.println("指定元素首次出现的下标位置:" + index);}public static int sequentialSearch(int[] arr, int value) {for (int i = 0; i < arr.length; i++) {if (arr[i] == value) {return i;}}return -1;}
}
- 二分查找
public class BinarySearch {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 11, 11, 11, 11, 11};int index = binarySearch(arr, 11);System.out.println("指定元素出现的下标位置:" + index);}public static int binarySearch(int[] arr, int val) {int low = 0;int high = arr.length - 1;while (low <= high) {int mid = (low + high) / 2;if (val > arr[mid]) {low = mid + 1;} else if (val < arr[mid]) {high = mid - 1;} else {return mid;}}return -1;}
}
六、数组复制
import java.util.Arrays;public class ArrayCopy {public static void main(String[] args) {int[] src = {1, 3, 5, 7, 9, 11, 13, 15, 17};int[] dest = new int[src.length];// 使用System.arraycopy复制数组System.arraycopy(src, 0, dest, 0, src.length);System.out.println(Arrays.toString(dest));// 使用Arrays.copyOf复制数组int[] copyOf = Arrays.copyOf(src, src.length);System.out.println(Arrays.toString(copyOf));// 使用Arrays.copyOfRange复制数组的一部分int[] copyOfRange = Arrays.copyOfRange(src, 2, 6);System.out.println(Arrays.toString(copyOfRange));}
}
七、数组转字符串
public class ArrayToString {public static void main(String[] args) {int[] arr = {22, 22, 13, 85, 15};String str = toString(arr);System.out.println(str);}public static String toString(int[] arr) {StringBuilder sb = new StringBuilder();for (int x = 0; x < arr.length; x++) {if (x != arr.length - 1) {sb.append(arr[x]).append(",");} else {sb.append(arr[x]);}}return sb.toString();}
}
八、数组反转
public class ArrayReverse {public static void main(String[] args) {int[] arr = {13, 22, 8, 7, 15};printArray(arr);reverseArray(arr);printArray(arr);}public static void reverseArray(int[] arr) {for (int start = 0, end = arr.length - 1; start < end; start++, end--) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;}}public static void printArray(int[] arr) {for (int i = 0; i < arr.length; i++) {if (i != arr.length - 1) {System.out.print(arr[i] + ",");} else {System.out.println(arr[i]);}}}
}
九、数组填充
import java.util.Arrays;public class ArrayFill {public static void main(String[] args) {int[] arr = new int[5];Arrays.fill(arr, 10);System.out.println(Arrays.toString(arr));String[] strArr = new String[5];Arrays.fill(strArr, "hello");System.out.println(Arrays.toString(strArr));// 填充指定范围Arrays.fill(arr, 1, 3, 20);System.out.println(Arrays.toString(arr));}
}
相关文章:
Java学习教程,从入门到精通,Java数组(Arrays)语法知识点及案例(19)
1、Java数组(Arrays)语法知识点及案例 一、数组的基本概念 数组是多个相同类型的数据按照一定的顺序排列的集合,使用一个名字命名,通过编号(索引)的方式对这些数据进行统一管理。数组是引用数据类型&…...
11.4OpenCV_图像预处理习题02
1.身份证号码识别(结果:身份证号识别结果为:911124198108030024) import cv2 import numpy as np import paddlehub as hubdef get_text():img cv2.imread("images1/images/shenfen03.jpg")# 灰度化gray_img cv2.cvt…...
go的template示例
模板定义: type Config struct {{{- $len : len .DbConfigs -}}{{- $i : 0 -}}{{- range $key, $value : .DbConfigs}}{{title $key}} *DbConfig "yaml:\"{{lower $key}}\"" {{if lt $i (sub $len 1)}},{{end}}{{- $i add $i 1 -}}{{- end…...
『YOLO』| 断点训练、解决训练中断异常情况
文章目录 方法一方法二 当yolo在训练的时候,如果训练中断或者出现异常,可通过修改代码,从上一次断掉处重新训练,实现断点续训。 方法一 第一种方法: 按照官方给出的恢复训练代码,用yolo命令格式ÿ…...
MQTT+Disruptor 提高物联网高并发
基于springboot2.5.7 废话不多说,直接上干货: Slf4j Configuration EnableConfigurationProperties(MqttProperties.class) IntegrationComponentScan(basePackages {"扫描包路径","扫描包路径"}) public class MqttAutoConfig {…...

SpringBoot项目集成ONLYOFFICE
ONLYOFFICE 文档8.2版本已发布:PDF 协作编辑、改进界面、性能优化、表格中的 RTL 支持等更新 文章目录 前言ONLYOFFICE 产品简介功能与特点Spring Boot 项目中集成 OnlyOffice1. 环境准备2. 部署OnlyOffice Document Server3. 配置Spring Boot项目4. 实现文档编辑功…...
用于nodejs的开源违禁词检测工具 JavaScript node-word-detection
地址 : https://www.npmjs.com/package/node-word-detection github地址: https://github.com/xiaobaidadada/node-word-detection 非常节省内存的轻量级快速违禁词、词典库 检测工具 、 50万个词大约需要300MB内存、被检测的文本100字内结果在1毫秒左右。本项目没有提供词库请…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。
上图是在安防领域的要求,一般都是一个屏幕上有显示多个摄像头捕捉到的画面,这一节,我们是从文件中读取多个文件,显示在屏幕上。...

Linux权限问题(账号切换,权限,粘滞位)
1.什么是权限? 在Linux下有两种用户,分别是超级用户(root)和普通用户。超级用户可以在Linux下做任何事情,几乎不受限制,而普通用户一般只能在自己的工作目录下(/home/xxx)工作&#…...
el-upload,上传文件,后端提示信息,前端需要再次重新上传(不用重新选择文件)
1.el-upload 上传附件: <el-uploadref"upload":action"upload.url ?updateSupport upload.updateSupport":auto-upload"false":disabled"upload.isUploading":headers"upload.headers":limit"1"…...

数字信号处理Python示例(5)使用实指数函数仿真PN结二极管的正向特性
文章目录 前言一、二极管的电流-电压关系——Shockley方程二、PN结二极管正向特性的Python仿真三、仿真结果分析写在后面的话 前言 使用Python代码仿真了描述二极管的电流-电压关系的Shockley方程,对仿真结果进行了分析,说明在正向偏置区域,…...
ctfshow(89,90,92,93)--PHP特性--intval函数
Web89 源代码: include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num)){echo $flag;} }审计 GET传参num。 如果在参数num中…...
构建ubuntu22.04.4私有源服务以及配置ubuntu私有源
构建ubuntu22.04.4私有源服务以及配置ubuntu私有源 一、环境说明1.1 私有源服务器1.2 客户机二 、构建私有源服务2.1 服务构建2.2 发布新的deb包到源服务器1. 准备新的 `.deb` 包2. 将 `.deb` 包添加到仓库目录3. 更新 `Packages` 文件4. 更新仓库的发布文件(可选)5. 通知客户…...
模块功能的描述方法
目录 行为描述方法 语句块 过程赋值语句 高级程序语句 循环语句 数据流描述 结构描述 混合描述方法 module 模块名(端口列表); // 模块声明// 端口定义input [数据类型] [位宽] 输入端口列表; output [数据类型] [位宽] 输出端口列表; inout [数据类…...
【WPF】MatrixTransform类
【WPF】MatrixTransform类 主要特性使用场景示例 在WPF(Windows Presentation Foundation)中,MatrixTransform 类是用于表示一个仿射变换的类,它允许开发者通过一个矩阵来定义一个二维空间中的线性变换。这种变换可以包括平移&…...

【C++】继承的理解
1.继承的概念和定义 1.1继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段,它允许程序员在 保 持原有类特性的基础上进行扩展 ,增加功能,这样产生新的类,称派生类。继承 呈现了面向对象 程序…...
day50 图论章节刷题Part02(99.岛屿数量 深搜、99.岛屿数量 广搜、100.岛屿的最大面积)
前言:前段时间论文开题落下了很多进度,今天开始会尽快赶上 99.岛屿数量 深搜 思路:对地图进行遍历遇到一个没有遍历过的陆地节点,计数器就1,并把该节点所能遍历到的陆地都标记上;遇到标记过的陆地节点和海…...

超详细从基准将VMware ESXi 升级到 vSphere 6.7U1教程
哈喽大家好,欢迎来到虚拟化时代君(XNHCYL),收不到通知请将我点击星标! “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福…...

华为OD机试 - 打印机队列 - 优先队列(Java 2024 E卷 200分)
华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…...

MatrixOne 助力西安天能替换MySQL+MongoDB+ES打造一体化物联网平台
物联网(IoT)时代,企业正以前所未有的速度加快数字化转型。西安天能软件科技有限责任公司(Skyable)作为工业物联网领域的领先企业,携手MatrixOne,共同构建新一代一体化物联网平台,实现…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...