Java 数组
在 Java 语言中,数组是一种基本的数据结构,可以存储一组相同类型的数据。本篇技术博客将详细介绍 Java 语言中的数组,包括一维数组和多维数组,以及数组的使用方法和注意事项。
一维数组
一维数组是指只有一行的数组,也就是最常见的数组形式。在 Java 语言中,一维数组的定义和初始化方式如下:
// 定义一个长度为 5 的整数数组
int[] arr1 = new int[5];// 定义一个包含初始值的整数数组
int[] arr2 = new int[]{1, 2, 3, 4, 5};// 省略数组长度的定义方式
int[] arr3 = {1, 2, 3, 4, 5};
其中,第一种定义方式需要指定数组的长度,第二种定义方式需要指定数组的初始值,第三种定义方式可以根据初始值自动推导出数组的长度。
访问和修改数组元素
一维数组中的元素可以通过下标来访问和修改,下标从 0 开始。例如:
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr[0]); // 输出 1
arr[0] = 0;
System.out.println(arr[0]); // 输出 0
在上面的示例中,定义一个长度为 5 的整数数组,并将第一个元素修改为 0。通过下标访问数组元素时,下标不能超出数组的范围,否则会抛出数组越界异常。
数组遍历
通常情况下,需要对数组中的每个元素进行操作,此时可以使用循环遍历数组。在 Java 语言中,可以使用 for 循环或者 foreach 循环遍历数组。例如:
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");
}
System.out.println();
for (int x : arr) {System.out.print(x + " ");
}
在上面的示例中,使用 for 循环和 foreach 循环分别遍历数组中的每个元素,并输出结果。
多维数组
多维数组是指由多个一维数组组成的数组,也就是数组中的数组。在 Java 语言中,多维数组的定义和初始化方式如下:
// 定义一个二维数组
int[][] arr1 = new int[2][3];// 定义一个包含初始值的二维数组
int[][] arr2 = {{1, 2, 3}, {4, 5, 6}};
其中,第一种定义方式需要指定二维数组的行数和列数,第二种定义方式可以根据初始值自动推导出二维数组的行数和列数。
访问和修改数组元素
多维数组中的元素可以通过多个下标来访问和修改,下标从 0 开始。例如:
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
System.out.println(arr[0][0]); // 输出 1
arr[0][0] = 0;
System.out.println(arr[0][0]); // 输出 0
在上面的示例中,定义一个二维数组,并将第一个元素修改为 0。通过多个下标访问数组元素时,下标不能超出数组的范围,否则会抛出数组越界异常。
数组遍历
多维数组的遍历可以使用嵌套循环来实现。例如:
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println();
}
在上面的示例中,使用嵌套循环遍历二维数组中的每个元素,并输出结果。
数组是一种非常常见的数据结构,可以存储一组相同类型的数据。在实际开发中,数组的应用场景非常广泛。本文将介绍数组的常见应用场景和使用注意事项。
数组的应用场景
存储一组数据
数组最常见的应用场景就是存储一组相同类型的数据。例如,存储学生的成绩、存储员工的工资等等。
int[] scores = {90, 80, 70, 60};
double[] salaries = {5000.0, 6000.0, 7000.0, 8000.0};
实现数据结构
数组也可以用于实现各种数据结构,例如队列、堆栈、哈希表等等。在实现这些数据结构时,数组可以作为基本的数据存储结构。
图像处理
在图像处理领域,数组也是非常常见的数据结构。使用数组可以将图像数据存储为像素矩阵,进行各种处理,例如调整亮度、对比度等等。
int[][] pixels = {{255, 255, 255}, {0, 0, 0}, {255, 0, 0}};
排序和查找
数组也可以用于排序和查找等操作。Java 中提供了 Arrays 类和 Collections 类来支持这些操作。例如,可以使用 Arrays 类中的 sort 方法对数组进行排序,使用 binarySearch 方法进行二分查找。
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
Arrays.sort(arr);
System.out.println(Arrays.binarySearch(arr, 5));
数组的使用注意事项
在使用数组时,需要注意以下几点:
数组的长度是不可变的
一旦定义了数组的长度,就无法更改。因此,需要在定义数组时考虑好数组的长度,避免后续需要动态扩容,这可能会导致性能损失。
数组下标从 0 开始
访问和修改数组元素时需要注意数组越界的问题。数组下标从 0 开始,因此数组的有效下标范围是从 0 到 length-1。如果访问或修改超出了这个范围,就会抛出 ArrayIndexOutOfBoundsException 异常。
int[] arr = {1, 2, 3};
System.out.println(arr[3]); // 抛出 ArrayIndexOutOfBoundsException 异常
数组是对象
数组是对象,因此可以作为参数传递给方法,也可以作为方法的返回值。但是,需要注意数组的引用传递问题,如果将一个数组作为参数传递给方法,方法内部修改数组的值,那么数组的值也会被修改。
void addOne(int[] arr) {for (int i = 0; i < arr.length; i++) {arr[i] += 1;}
}int[] arr = {1, 2, 3};
addOne(arr);
System.out.println(Arrays.toString(arr)); // 输出 [2, 3, 4]
遍历数组时要注意数组的长度
在遍历数组时,需要注意数组的长度。数组的长度可以通过 length 属性获取。
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);
}
结语
本篇技术博客介绍了 Java 语言中的数组,包括一维数组和多维数组的定义、初始化、访问、修改和遍历方式,以及注意事项。掌握数组的使用方法对于 Java 开发者来说是非常重要的,希望本文对您有所帮助。
相关文章:
Java 数组
在 Java 语言中,数组是一种基本的数据结构,可以存储一组相同类型的数据。本篇技术博客将详细介绍 Java 语言中的数组,包括一维数组和多维数组,以及数组的使用方法和注意事项。 一维数组 一维数组是指只有一行的数组,…...
CSDN 编程竞赛五十八期题解
竞赛总览 CSDN 编程竞赛五十八期:比赛详情 (csdn.net) 竞赛题解 题目1、打家劫舍 有一个小偷计划偷窃沿街的房屋,每间房内都藏有一定的现金,影响偷窃行为的唯一制约因素就是相邻的房屋装有相互连通的防盗系统。如果两间相邻的房屋在同一晚…...
Unity入门6——光源组件
一、参数面板 二、参数介绍 Type:光源类型 Spot:聚光灯 Range:发光距离Spot Angle:光锥角度Directional:方向光Point:点光源Area(Baked Only):面光源 仅烘焙。预先算好&…...
C语言之动态内存分配(1)
目录 本章重点 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 几个经典的笔试题 柔性数组 动态内存管理—自己维护自己的内存空间的大小 首先我们申请一个变量,再申请一个数组 这是我们目前知道的向内存申请…...
AIGC新时代,注意政策走向,产业方向,拥抱可信AI。需要了解基本理论,基础模型,前沿进展,产品应用,以及小小的项目复现
AIGC(AI-Generated Content,AI生成内容)是指基于生成对抗网络(GAN)、大型预训练模型等人工智能技术的方法,通过对已有数据进行学习和模式识别,以适当的泛化能力生成相关内容的技术。类似的概念还…...
如何白嫖一年CSDN会员?618活动!亲测有效!!!
活动详情 CSDN会员免费送一年,仅剩3天! 下载权益延长一年! 一年一次的机会,错过了就要再等明年! 博主已经领取到了! 会员权益 1、修改专属域名,别人都是https://blog.csdn.net/qq_xxxxxxxx&a…...
微服务: 00-rabbitmq出现的异常以及解决方案
目录 前言: 问题概述: 1. rabbitmq初始安装配置异常 -> 1.1 rabbitmq报您与此网站连接不是私密连接 --->1.1.1 上述问题解决方案 ---> 1.1.2 依次执行下面代码 -> 1.2 解决用户的No access情况 -> 1.2.1 使用设置的账号密码进行登录 -> 1.2.2 点击 Ad…...
Vue3与Vue2比较
Vue.js 3相对于Vue.js 2带来了一些重大变化,其中包括一些语法变化。 下面是Vue.js 2和Vue.js 3的一些语法差异比较: 一、语法差异比较 1.组件的注册方式不同 在Vue.js 2中,我们使用Vue.component()或者Vue.extend()方式创建一个组件。但是…...
如何对待工作中的失误?
在日复一日的工作中,我们免不了会产生一些失误,会因此感到沮丧和失望。但如何正确地对待和处理这些失误才是最重要的,它直接影响到我们的工作表现和个人成长。一起来谈谈作为职场人的你时如何处理工作中的失误的吧! 一、在面对失…...
使用css3如何实现一个文字打印效果
前言 在很多网站首页介绍页里,为了吸引用户,暂留更长时间,使用了一些css3动画的 示例效果 文字打印.gif 实现这个动画原理 想要实现这个动画,改变元素的宽度,结合动画css3关键帧实现 具体代码如下所示 <!DOCTYPE html> <html lang"en"><head><m…...
【雕爷学编程】Arduino动手做(115)---HB100多普勒雷达模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…...
深度学习笔记之Transformer(一)注意力机制基本介绍
深度学习笔记之Transformer——注意力机制基本介绍 引言回顾: Seq2seq \text{Seq2seq} Seq2seq模型中的注意力机制注意力机制的简单描述注意力机制的机器学习范例: Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归 Nadaraya-Watson \text…...
基于SpringBoot的SSM整合案例 -- SpringBoot快速入门保姆级教程(四)
文章目录 前言1.设计创建数据库表tbl_book2.创建新的SpringBoot模块,勾选相关依赖3. 添加SpringBoot创建项目时没有提供的相关坐标4.根据数据库表创建实体类Book5.编写dao层操作BookDao6.编写Service服务层接口BookService7.编写服务层实现类BookServiceImpl8.编写B…...
占据80%中国企业出海市场,亚马逊云科技如何为出海客户提供更多资源和附加值
亚马逊云科技就可以做到,作为占据80%中国企业出海市场的亚马逊云科技,其覆盖全球的业务体系,从亚马逊海外购、亚马逊全球开店、亚马逊智能硬件与服务,Amazon Alexa,Amazon Music都是属于亚马逊云科技“梦之队”的一员。…...
系统架构设计师笔记第11期:信息安全的抗攻击技术
拒绝服务攻击 拒绝服务攻击(Denial of Service,DoS)是一种旨在使目标系统无法提供正常服务的攻击方式。攻击者通过向目标系统发送大量的请求或占用系统资源,超过系统的承载能力,导致系统过载或崩溃,从而使…...
TLD7002学习笔记(二)-使用S32K144驱动TLD7002
文章目录 1. 前言2. 评估板简介3. 官方驱动3.1 官网驱动的介绍3.2 官方驱动的移植3.3 官方驱动的使用 4. 参考资料 1. 前言 本篇文章是TLD7002学习笔记的第二篇,主要是介绍如何使用S32K144驱动TLD7002-16ES。为此,笔者做了一套基于TLD7002-16ES的评估板…...
[元带你学: eMMC协议详解 14] 数据擦除(Erase) 详解
依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4200字, 主要内容介绍了各种擦除操作概念以记用法,总结了不同擦除操作的区别, 根据不同安全级别和应用场景…...
【程序人生-Hello‘s P2P】哈尔滨工业大学深入理解计算机系统大作业
计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 xxxx 学 号 2021xxxx 班 级 210xxxx 学 生 xx 指 导 教 师 xxx 计算机科学与技术学院 2023年5月 摘 要 HelloWorld是每个程序员接触的第一个程序,表面上平平无奇的它背后却是由操作系统许多设计精巧的机制支撑…...
Android Studio入门
首先确保系统已经安装好JDK和Android SDK Android SDK的安装有两种方案 方案一:直接下载包安装 官网下载 国内下载 方案二:使用命令行工具进行安装 在Android Studio官网下载Command line tools 最新:如果使用 Android Studio,…...
r2pm -ci r2ghidra 时报错:checking pkg-config flags for r_core... no
参考网址: sys/python.sh fails with checking pkg-config flags for r_core... no Issue #1943 radareorg/radare2 GitHub 进入目录/root/.local/share/radare2/r2pm/git/r2ghidra查看configure文件,查找报错位置 执行指令 : # pkg-co…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
