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,共同构建新一代一体化物联网平台,实现…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...