当前位置: 首页 > news >正文

Java数组:特性、初始化、遍历、多维数组与常用操作

目录

前言

一、初识数组

1. 数组的定义

2. 数组的核心特点(必考)

3. 数组的声明与初始化

(1)数组声明语法

(2)静态初始化

(3)动态初始化

4. 数组默认初始化值规则

二、数组元素访问与修改

1. 数组索引规则

2. 元素访问与修改代码实战

三、数组长度与越界异常

1. 数组长度属性 length

2. 数组越界异常演示

四、数组遍历(开发最常用)

1. 普通for循环遍历(可操作索引、可修改元素)

2. 增强for循环(只读遍历,简洁高效)

五、多维数组(二维数组为主)

1. 二维数组概念

2. 二维数组初始化与遍历

六、数组常用工具类操作(Arrays)

1. 数组排序 Arrays.sort()

2. 数组复制(两种方式)

3. 二分查找 binarySearch

七、数组致命缺点与动态数组解决方案

1. 数组致命短板

2. 动态替代方案:ArrayList

八、全文总结


前言

数组是 Java 中最基础、最重要的数据结构,也是集合、算法、数据存储的底层基石。相比于变量只能存储单个数据,数组可以批量存储一组相同类型的数据

很多初学者对数组的长度不可变、索引机制、内存特性、遍历方式、数组工具类操作理解模糊,导致后续集合、算法刷题、业务代码频繁踩坑。

本文从零完整讲解 Java 数组全套知识点,包含定义特点、初始化方式、默认值、索引操作、遍历、多维数组、数组常用工具类操作及数组与 ArrayList 的区别,搭配全套可运行代码,适合零基础入门与面试复习。

一、初识数组

1. 数组的定义

数组是存储一组相同数据类型、连续内存空间的数据结构。数组中每一个数据称为元素,元素通过索引(下标)进行访问。

简单理解:数组就是批量变量的容器,解决单个变量只能存一条数据的问题。

2. 数组的核心特点(必考)

  • 长度固定不可变:数组一旦初始化开辟内存,长度永久固定,无法动态扩容缩容

  • 类型统一:数组内所有元素必须是相同数据类型

  • 内存连续:元素在内存中连续存储,查询速度极快,增删需要移动元素

  • 索引从零开始:有效索引范围0 ~ 长度-1

正因内存连续的特性:数组查询快、增删慢。删除/插入中间元素时,后面所有元素需要移位,性能损耗大;且数组没有真正删除元素的方法,只能覆盖赋值。

3. 数组的声明与初始化

Java 数组分为静态初始化动态初始化

(1)数组声明语法
// 标准写法(推荐) 数据类型[] 数组名; // 老式写法(不推荐) 数据类型 数组名[];
(2)静态初始化

直接给出元素值,系统自动识别数组长度。适用于已知具体元素的场景。

public class ArrayInitDemo { public static void main(String[] args) { // 静态初始化 int[] arr = {11,22,33,44,55}; String[] strArr = {"Java","C++","Python"}; System.out.println(arr.length); System.out.println(strArr.length); } }
(3)动态初始化

只指定数组长度,系统自动分配默认值。适用于只知道数量、未知元素的场景。

public class ArrayNewDemo { public static void main(String[] args) { // 动态初始化:长度为5的int数组 int[] arr = new int[5]; // 长度为3的字符串数组 String[] strArr = new String[3]; } }

4. 数组默认初始化值规则

动态初始化后,数组会自动赋予默认值,无需手动赋值:

  • 基本数值类型(byte/short/int/long):默认0

  • 浮点类型(float/double):默认0.0

  • 布尔类型 boolean:默认false

  • 字符类型 char:默认\u0000(空字符)

  • 引用类型(String、对象):默认null

二、数组元素访问与修改

1. 数组索引规则

数组索引从0开始;若数组长度为 n,索引范围:0 ~ n-1

索引小于0 或 索引 >= 数组长度,会抛出:ArrayIndexOutOfBoundsException数组越界异常。

2. 元素访问与修改代码实战

public class ArrayOperateDemo { public static void main(String[] args) { int[] arr = {10,20,30,40}; // 根据索引访问元素 System.out.println("第一个元素:" + arr[0]); System.out.println("第二个元素:" + arr[1]); // 修改元素 arr[0] = 99; arr[2] = 666; System.out.println("修改后第一个元素:" + arr[0]); System.out.println("修改后第三个元素:" + arr[2]); } }

三、数组长度与越界异常

1. 数组长度属性 length

数组提供只读属性数组名.length,可以获取当前数组元素个数。

int[] arr = {1,3,5,7,9}; System.out.println("数组长度:" + arr.length);

2. 数组越界异常演示

public class ArrayOutDemo { public static void main(String[] args) { int[] arr = {10,20,30}; // 有效索引:0、1、2 // arr[3] 超出范围,运行报错 // System.out.println(arr[3]); } }

开发规范:遍历、取值必须保证索引在合法区间,避免数组越界。

四、数组遍历(开发最常用)

1. 普通for循环遍历(可操作索引、可修改元素)

public class ForLoopDemo { public static void main(String[] args) { int[] arr = {11,22,33,44,55}; for (int i = 0; i < arr.length; i++) { System.out.println("索引"+i+":"+arr[i]); } } }

2. 增强for循环(只读遍历,简洁高效)

public class ForEachDemo { public static void main(String[] args) { int[] arr = {11,22,33,44,55}; // 直接取出每一个元素,无索引 for (int num : arr) { System.out.println(num); } } }

场景区别:需要索引、修改元素用普通for;单纯遍历取值用增强for。

五、多维数组(二维数组为主)

1. 二维数组概念

二维数组本质是存放一维数组的数组,常用于表格数据、矩阵、棋盘等场景。

2. 二维数组初始化与遍历

public class TwoArrayDemo { public static void main(String[] args) { // 二维数组静态初始化 int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; // 双层循环遍历 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(); } } }

六、数组常用工具类操作(Arrays)

Java 提供java.util.Arrays工具类,封装了数组复制、排序、查找、打印等高频方法。

1. 数组排序 Arrays.sort()

import java.util.Arrays; public class ArraySortDemo { public static void main(String[] args) { int[] arr = {5,2,9,1,6}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } }

2. 数组复制(两种方式)

import java.util.Arrays; public class ArrayCopyDemo { public static void main(String[] args) { int[] oldArr = {1,2,3,4,5}; // 方式1:Arrays.copyOf 常用 int[] newArr1 = Arrays.copyOf(oldArr,oldArr.length); // 方式2:System.arraycopy 底层高效 int[] newArr2 = new int[oldArr.length]; System.arraycopy(oldArr,0,newArr2,0,oldArr.length); System.out.println(Arrays.toString(newArr1)); } }

3. 二分查找 binarySearch

注意:数组必须先排序才能二分查找

import java.util.Arrays; public class ArraySearchDemo { public static void main(String[] args) { int[] arr = {10,20,30,40,50}; int index = Arrays.binarySearch(arr,30); System.out.println("目标元素索引:"+index); } }

七、数组致命缺点与动态数组解决方案

1. 数组致命短板

  • 长度固定,不适合数据动态增减场景

  • 增删元素效率低,需要移位覆盖

  • 没有封装增删改查方法,原生操作繁琐

2. 动态替代方案:ArrayList

为了解决数组不可变的问题,Java 提供ArrayList 动态数组,底层基于数组封装,具备:

  • 自动扩容、动态长度

  • 内置 add/remove/set/get 丰富方法

  • 业务开发 99% 场景替代原生数组

八、全文总结

1. 数组是固定长度、同类型、连续内存的数据结构,查询快、增删慢;

2. 数组分为静态初始化、动态初始化,拥有统一默认值机制;

3. 通过索引访问元素,索引越界会直接报错;

4. 遍历分为普通for(可改元素)和增强for(只读遍历);

5. Arrays工具类可快速完成排序、复制、查找、打印;

6. 原生数组长度不可变,业务开发优先使用 ArrayList 动态数组。

最后一句

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。如果在学习的过程中有什么疑问欢迎大家在评论区向我提出。

http://www.jsqmd.com/news/1213844/

相关文章:

  • 5分钟快速上手:猫抓浏览器扩展终极指南 - 网页媒体资源捕获的高效解决方案
  • 9种字重免费几何字体:Poppins多语言排版终极解决方案
  • 3分钟掌握WindowResizer:彻底告别Windows窗口尺寸限制的终极方案
  • 3步掌握Locale Emulator:Windows区域语言模拟完全指南
  • Nexus Mods App终极指南:如何轻松管理100+游戏模组不崩溃
  • 【单片机毕业设计】基于 STM32 的井下沼气水位井盖倾斜智能监测报警系统设计,基于 STM32 单片机的管网井多参数检测与短信预警装置开发(016201)
  • 2026福州厂房彩钢瓦修缮哪家靠谱?本地4大优质服务商测评避坑攻略 - 本地便民网
  • 2026滨州防水补漏实测推荐|楼顶/屋面/卫生间/外墙/地下室防水堵漏、免砸砖维修、阳台飘窗漏水修复口碑榜全维度测评(7月滨州深度测评) - 吉林同城获客
  • Claude Cowork 上了 Web 和移动端后,能替代 We0.ai 持续运营官网吗?
  • 2026济宁防水补漏实测推荐|楼顶/屋面/卫生间/外墙/地下室防水堵漏、免砸砖维修、阳台飘窗漏水修复口碑榜全维度测评(7月济宁深度测评) - 吉林同城获客
  • 具身大脑:VLA与WAM驱动的机器人物理直觉构建
  • 视频硬字幕提取革命:本地化OCR技术如何让字幕提取变得简单高效?
  • AI时代的程序员修养:高并发不是加机器那么简单
  • VESC Tool完全指南:5分钟掌握开源无刷电机控制器配置工具
  • 2026广州劳力士手表回收误区丨保值排名 门店正规指南 - 分享测评官
  • 暗黑3一键解放双手:D3KeyHelper智能按键助手完整使用指南
  • NS-USBLoader移动版:将你的Android手机变身为Switch游戏安装中心
  • 闲谈《道德经》022|曲全枉直
  • 3分钟掌握WindowResizer:Windows窗口强制调整的终极解决方案
  • 5分钟掌握免费在线EPUB编辑器:零基础制作专业电子书
  • Lua字节码逆向实战:unluac反编译优化与可读性提升技巧
  • 孩子叛逆、沉迷手机、死活不愿上学?来石家庄圣龙文武学校调整改变 - 全国文武学校招生
  • RPA开发者转型AI自动化工程师的黄金路径:3阶段认证体系+头部企业内推通道(附能力图谱)
  • 2026马鞍山甲醛治理怎么选:只做治理、不做检测的专业CMA 资质实验室——艾尚安醛甲醛治理中心室内空气及环境治理 - 绿呼吸检测中心
  • 如何用Translumo实时屏幕翻译打破语言障碍:免费开源工具的完整使用指南
  • 毕设开源 yolo11深度学习果树害虫识别系统(源码+论文)
  • 3步为Windows 11 LTSC安装微软商店:告别应用荒的终极解决方案
  • 解锁老旧窗口新生命:Magpie超分辨率工具完全指南
  • 如何利用免费开源STDF-Viewer快速分析半导体测试数据:从入门到精通的完整指南
  • 2026年清远经济纠纷律所怎么选?这份本地评测请收好 - 博客万