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…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
