【Java核心技术10】Java数组详解

引言

在Java编程中,数组是一种非常重要的数据结构,它允许我们存储同一类型的多个元素,并通过索引快速访问这些元素。本文将详细讲解Java数组的基本概念、创建、初始化、访问和修改,以及多维数组和数组的常见操作。
无论你是Java的初学者,还是希望巩固基础的资深开发者,本文都将为你提供有价值的信息。


一、数组的基本概念

数组是一种线性数据结构,用于存储相同类型的元素集合。在Java中,数组是对象,它们被存储在堆内存中,并且每个元素都可以通过其索引来访问。数组的索引从0开始,到数组长度减1结束。

二、数组的创建与初始化

在Java中,我们可以通过以下两种方式创建和初始化数组:

1. 静态初始化:在声明数组的同时为其赋值。


int[] numbers = {1, 2, 3, 4, 5}; // 静态初始化一个整型数组  
String[] names = {"Alice", "Bob", "Charlie"}; // 静态初始化一个字符串数组

2. 动态初始化:先声明数组,再为其分配内存空间,并可选地为其赋值。


int[] scores = new int[5]; // 动态初始化一个长度为5的整型数组,元素默认值为0  
scores[0] = 85; // 为数组的第一个元素赋值  
scores[1] = 90; // 为数组的第二个元素赋值  
// ...以此类推

三、数组的访问与修改

通过数组的索引,我们可以轻松地访问和修改数组中的元素。

1. 示例代码:


int[] ages = {25, 30, 35, 40};  
System.out.println(ages[2]); // 输出:35,访问数组的第三个元素  
ages[2] = 45; // 修改数组的第三个元素为45
System.out.println(ages[2]);

2. 执行结果:

35
45

四、数组的遍历

1. 遍历数组是常见的操作,通常使用 for 循环:

1) 示例代码:


int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {System.out.println(numbers[i]);
}

2)执行结果:

1
2
3
4
5

2. 增强for循环(foreach)也是一种简洁的遍历方式:


for (int number : numbers) {System.out.println(number);
}

四、数组的复制与比较

1. 复制数组 可以使用 System.arraycopy() 方法或 Arrays.copyOf() 方法:

1)示例代码:

  • 建立了两个数组:拥有 5 个元素的 source 数组和长度为 5 的空数组 dest
  • 将source数组中的数据完全 复制 到dest数据中。
  • 复制前打印dest数组,复制后再次打印dest数组。以验证是否复制成功。

int[] source = {1, 2, 3, 4, 5};
int[] dest = new int[source.length];//未复制前,打印dest数组
for (int i = 0; i < dest.length; i++) {System.out.println("复制前,dest数组第" + i + "个值:" + dest[i]);
}//将数组source 复制到空数组dest中,从数组索引0开始,即第一个元素
System.arraycopy(source, 0, dest, 0, source.length);
//复制后,打印dest数组
for (int i = 0; i < dest.length; i++) {System.out.println("复制后,dest数组第" + i + "个值:" + dest[i]);
}

2)执行结果:

复制前,dest数组第0个值:0
复制前,dest数组第1个值:0
复制前,dest数组第2个值:0
复制前,dest数组第3个值:0
复制前,dest数组第4个值:0
复制后,dest数组第0个值:1
复制后,dest数组第1个值:2
复制后,dest数组第2个值:3
复制后,dest数组第3个值:4
复制后,dest数组第4个值:5

复制数组也可以使用 Arrays.copyOf() 方法:


//将数组source 复制到空数组dest中
int[] dest = Arrays.copyOf(source, source.length);

2. 比较两个数组是否相等,不能直接使用==,而应使用 Arrays.equals() 方法:

1)示例代码:


int[] array1 = {1, 2, 3};
int[] array2 = {1, 2, 3};
boolean isEqual = Arrays.equals(array1, array2); // 比较两个数组是否相等
System.out.println("array1 和 array2 是否相等:" + isEqual);

2)执行结果:

array1 和 array2 是否相等:true

五、数组的排序与搜索

1. 示例代码:

JavaArrays 类提供了 排序搜索 数组的静态方法:


int[] numbers = {5, 3, 1, 4, 2};
Arrays.sort(numbers); // 排序数组//循环打印数组
for (int i = 0; i < numbers.length; i++) {System.out.println("数组第" + i + "个值:" + numbers[i]);
}int index = Arrays.binarySearch(numbers, 3); // 查找元素3的索引
System.out.println("");//此处为了打印结果显示清晰,插入空行,换行
System.out.println("查找到第3个值:" + index);

2. 执行结果:

数组第0个值:1
数组第1个值:2
数组第2个值:3
数组第3个值:4
数组第4个值:5查找到第3个值:2

六、多维数组

1. 多维数组是数组的数组,常用于存储矩阵或表格数据:


int[][] matrix = new int[3][3];
matrix[0][0] = 1; // 初始化矩阵的元素

2. 遍历多维数组:

1)示例代码:

//声明一个3行3列的多维数组
int[][] matrix = new int[3][3];matrix[0][0] = 0; // 初始化矩阵的元素
matrix[0][1] = 1; // 初始化矩阵的元素
matrix[0][2] = 2; // 初始化矩阵的元素
matrix[1][0] = 10; // 初始化矩阵的元素
matrix[1][1] = 11; // 初始化矩阵的元素
matrix[1][2] = 12; // 初始化矩阵的元素
matrix[2][0] = 20; // 初始化矩阵的元素
matrix[2][1] = 21; // 初始化矩阵的元素
matrix[2][2] = 22; // 初始化矩阵的元素//嵌套循环打印多维数组。
for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {System.out.print(matrix[i][j] + " ");}System.out.println();
}

2)执行结果:

0 1 2 
10 11 12 
20 21 22

七、高级话题:动态数组与ArrayList

虽然Java的数组长度固定,但 java.util.ArrayList 类提供了类似数组的功能,同时支持动态调整大小:

1. 示例代码:


import java.util.ArrayList;
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);

2. 执行结果:

[1, 2, 3]

结束语

通过本文的讲解和示例,我们全面地介绍了Java数组的各个方面,从基础的创建、初始化,到访问、遍历、复制、排序等高级操作。无论你是初学者还是有经验的开发者,掌握数组的使用都是编程道路上的重要一步。

希望本文能够帮助你深化对Java数组的理解,为你的编程之旅增添更多色彩。在日常开发中,不妨尝试将学到的知识应用到实际项目中,让理论与实践相结合,不断提升自己的编程技能。

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

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

相关文章

训练营第四十二天| 583. 两个字符串的删除操作72. 编辑距离647. 回文子串516.最长回文子序列

583. 两个字符串的删除操作 力扣题目链接(opens new window) 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: "sea", "eat"输出: …

如何优雅的一键同步OpenHarmony代码到gitlab?请关注【itopen:gitlab_sync】

itopen组织&#xff1a;1、提供OpenHarmony优雅实用的小工具2、手把手适配riscv qemu linux的三方库移植3、未来计划riscv qemu ohos的三方库移植 小程序开发4、一切拥抱开源&#xff0c;拥抱国产化 一、概述 项目中有需求要将 OpenHarmony 整套代码同步到项目的 gitlab…

nginx地址重写rewrite

nginx地址重写rewrite 1.nginx重写rewrite 1.rewrite相关语句 ifrewritesetreturn 2.if语句 应用环境 server,location语法 if () #可以支持&#xff1a; ~ #正则匹配(区分大小写) ~* #正则匹配(不区分大小写) !~ #正则不匹配(区分大小写) !~* #正则不匹配…

使用fetch加载阿里云的在线json 出现403错误

在做地图项目的时候&#xff0c;引用了阿里云的在线JSON地图数据。 问题描述&#xff1a; 但是本地开发使用fetch请求json地址的时候接口却出现了403错误&#xff0c;把地址直接复制到浏览器上却能正常打开。 https://geo.datav.aliyun.com/areas_v3/bound/330000_full.json …

06-操作元素

在前面的文章中重点介绍了一些元素的定位方法&#xff0c;定位到元素后&#xff0c;就需要操作元素了。本篇通过简单案例来介绍app应用中的一些常用操作。 一、案例介绍 下面列表中有四个字典&#xff0c;每个字典中的num1代表第一个操作数&#xff0c;num2代表第二个操作数&a…

力扣 面试题17.04.消失的数字

数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 示例 1&#xff1a; 输入&#xff1a;[3,0,1] 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;[9,6,4,2,3,5,7,0,1] 输出&#x…

GIT----使用技巧之保存现场回退新建分支继续开发

GIT----使用技巧之保存现场回退新建分支继续开发 前言&#xff1a; 故事是这样的&#xff0c;有一个比较复杂的项目使用的是STM32F103VCT6&#xff08;资源flash-256k,RAM-48k&#xff09;,开发到一半发现RAM不够用了&#xff0c;换容量更大的芯片STM32F103VGT6&#xff08;资源…

再谈量化策略失效的问题

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

【qt5生成软件-can卡-上位机-无法加载ControlCAN.dll错误代码(0xc0150002)等相关问题-WIN11系统-尝试解决】

【qt5生成软件-无法加载ControlCAN.dll&错误代码0xc0150002&#xff1a;-等相关问题-WIN11系统-尝试解决-总结整理】 1.前言2.环境说明3.问题说明4.尝试方法总结&#xff08;1&#xff09;更新支持包c库&#xff08;2&#xff09;更新USB相关驱动&#xff08;3&#xff09;…

Sqlite3数据库基本使用

一、基本概念 数据&#xff1a;能够输入计算机并能被计算机程序识别和处理的信息集合 数据库&#xff1a;长期存储在计算机内、有组织的、可共享的大量数据的集合 DBMS&#xff1a;位于用户与操作系统之间的一层数据管理软件&#xff0c;用于操纵和管理数据库 二、安装 在线…

一文读懂Java线程池之自定义线程池、设置合适的线程数量、线程池阻塞队列、线程拒绝策略

在上篇我们学习了线程池各个参数的含义,线程池任务处理流程,使用线程池的好处等内容,本篇我们学习如何创建一个适合我们业务的线程池。为此,我们有必要先学习一下如何大概确定我们线程池核心线程数、怎么设置阻塞队列的类型与大小、当线程池没有能力处理任务了该如何使用拒…

JS中操作符是什么

在JavaScript中&#xff0c;操作符是用于执行特定任务&#xff08;如加法、减法、比较等&#xff09;的特殊符号。这些操作符根据其功能可以分为几类&#xff1a; 算术操作符&#xff1a; &#xff1a;加法-&#xff1a;减法或取反*&#xff1a;乘法/&#xff1a;除法%&#xf…

经验分享,16进制与字符串的互相转换网站

分享一个16进制与字符串的互相转换的网站&#xff0c;比较实用。 网址&#xff1a; https://www.bejson.com/convert/ox2str/ 截图&#xff1a;

C++中priority_queue的模拟实现(注释详解)

首先我们要了解什么是 priority_queue &#xff0c;priority_queue 优先队列是一种数据结构&#xff0c;它存储了元素以及它们的优先级。在优先队列中&#xff0c;元素按照其优先级的顺序进行移除&#xff0c;优先级较高的元素首先被移除。优先队列通常使用堆数据结构来实现&am…

Linux内核编程(六)平台总线plantform驱动模型

本文目录 前述&#xff1a;为什么引入平台总线模型一、知识点1. 什么是平台总线模型2. 平台总线模型使用3. 平台总线是如何工作的4. 平台总线模型的优点 二、平台总线设备层1. 常用API&#xff08;1&#xff09; 注册一个平台设备&#xff08;2&#xff09; 注销一个平台设备&a…

最好用的智能猫砂盆存在吗?自用分享智能猫砂盆测评!

在现代都市的忙碌生活中&#xff0c;作为一名上班族&#xff0c;经常因为需要加班或频繁出差而忙碌得不可开交。急匆匆地出门&#xff0c;却忘了给猫咪及时铲屎。但是大家要知道&#xff0c;不及时清理猫砂盆会让猫咪感到不适&#xff0c;还会引发各种健康问题&#xff0c;如泌…

SolidityFoundry 安全审计测试 Delegatecall漏洞2

名称&#xff1a; Delegatecall漏洞2 https://github.com/XuHugo/solidityproject/tree/master/vulnerable-defi 描述&#xff1a; 我们已经了解了delegatecall 一个基础的漏洞——所有者操纵漏洞&#xff0c;这里就不再重复之前的基础知识了&#xff0c;不了解或者遗忘的可…

HTML入门教程:深度解析HTML,开启你的前端技术之旅

一、引言 HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是前端开发的基础&#xff0c;它负责构建网页的结构和内容。作为前端技术栈的基石&#xff0c;HTML的掌握程度直接影响到网页的开发效率和用户体验。本教程将带你从零开始&#xff…

C语言从头学23——参数的传值与传址引用

在前面学习函数时&#xff0c;曾学习过函数的参数。函数的参数可以是具体的值&#xff0c;也可以是变量。当函数的参数是变量时&#xff0c;就涉及到参数如何传递到函数中。一般有两种方式&#xff1a;传值引用方式、传址引用方式。 一、传值引用&#xff1a;函数的参数以…

微信小程序学习(四):模板语法、数据绑定、数据监听

1、声明和绑定数据 小程序页面中使用的数据均需要在 Page() 方法的 data 对象中进行声明定义在将数据声明好以后&#xff0c;需要在 WXML 中绑定数据&#xff0c;数据绑定最简单的方式是使用 Mustache 语法&#xff08;双大括号&#xff09;将变量包起来。在 {{ }} 内部可以做…