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

9.数组介绍和静态初始化

数组

 数组是一种容器,可以用来存储同种数据类型的多个值

     数组的静态初始化


初始化:就是在内存中,为数组开辟空间,并将数据存入容器中的过程

数组的定义格式

格式1:数据类型[] 数组名

范例:int[] array

格式2:数据类型 数组名[]

范例:int array[]

注意 : 这种定义格式,定义出来的,只是数据类型的变量而已,内存中还没有创建出数组容器

数组的静态初始化格式

完整格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,......}

简化格式:数据类型[] 数组名 ={元素1,元素2,元素3,......}

例如:

public static void arrayTest2() {//完整格式int[] array = new int[]{1,25,33,44};// 简化格式int[] array1 = {1,22,33,44};//打印数组名System.out.println(array);//[I@4eec7777System.out.println(array1);//[I@3b07d329
}

注意当打印数组名时,得到的结果时[I@3b07d329

@:分割符

[:当前空间,是数组类型的

I:当前数组类型,是int类型

3b07d329:数组的十六进制内存地址


     数组的元素访问


数组的访问格式:

        格式:数组名[索引];

        索引:索引是数组容器中空间的编号,编号从0开始,逐个+1增长


     数组遍历操作


数组遍历:将数组中所有的内容取出来,取出来之后可以进行各种操作(打印,求和,判断……)

数组名.length:动态获取数组的长度(数组里面元素的个数)

数组遍历快捷键:数组名.fori

例如:打印出数组的每一个元素

public class ArrayDemo1 {public static void main(String[] args) {int[] array = {11,22,33,44,55};arrayTest1(array);}// 数组的遍历public static void arrayTest1(int[] array){for (int i = 0; i<array.length; i++){System.out.println(array[i]);}}
}

例如:求一组数据偶数的和

public class ArrayDemo1 {public static void main(String[] args) {int[] array = {11,22,33,44,55};int sum = doubleSum(array);System.out.println(sum);}//求数组中偶数和public static int doubleSum(int[] array) {int sum = 0;for (int i = 0; i < array.length; i++) {if(array[i]%2==0){sum += array[i];}}return sum;}
}

     数组动态初始化


动态初始化:初始化时只指定数组长度,由系统为数组分配初始值

格式:数据类型[] 数组名 = new 数据类型[数组长度]

范例:int[] arr = new int[3];

在Java中,数组动态初始化时,会根据数组元素的类型自动赋予默认初始值。

 数值类型(整数和浮点数)

  • byteshortintlong:默认值为 0

  • floatdouble:默认值为 0.0

字符类型

  • char:默认值为 \u0000(Unicode空字符)。

布尔类型

  • boolean:默认值为 false

引用类型

  • 类、接口、数组等引用类型:默认值为 null

int[] intArray = new int[3]; // 所有元素初始化为 0
double[] doubleArray = new double[3]; // 所有元素初始化为 0.0char[] charArray = new char[3]; // 所有元素初始化为 \u0000
boolean[] boolArray = new boolean[3]; // 所有元素初始化为 false
String[] strArray = new String[3]; // 所有元素初始化为 null
Object[] objArray = new Object[3]; // 所有元素初始化为 null

动态初始化和静态初始化数组的区别和使用场景

区别:

内存分配时机
静态初始化在编译时分配内存并赋值,数组大小固定;动态初始化在运行时通过new关键字分配内存,大小可动态确定。

语法形式
静态初始化直接声明元素值,如 int[] arr = {1, 2, 3};;动态初始化需指定大小,如 int[] arr = new int[3];,元素初始值为默认值(如0、null)。

灵活性
动态初始化允许运行时确定数组长度,适用于数据量未知的场景;静态初始化适用于元素已知且固定的情况。

静态初始化的使用场景

        已知初始值
当数组元素在编码阶段已确定时

        常量配置
用于定义不可变的常量集合

        代码简洁性

                减少冗余代码,直接在声明时赋值,避免后续单独初始化。

动态初始化的使用场景

        运行时确定大小
用户输入或计算得到数组长度时使用

        延迟赋值
先分配内存再逐步填充数据

        性能优化
大规模数据需预分配内存避免频繁扩容

选择建议

  1. 优先静态初始化:元素已知且数量较少时,提升代码可读性。

  2. 必须动态初始化:数据量依赖运行时输入或计算,或需要延迟赋值。

  3. 注意默认值:动态数组的默认值可能影响逻辑,需显式重置(如Arrays.fill())。


     

二维数组


二维数组的定义

二维数组是由行和列组成的表格状数据结构,可以看作数组的数组。每个元素通过两个索引(行索引和列索引)访问。

二维数组的声明与初始化

静态初始化(直接赋值):

int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

动态初始化(指定行列大小):

int rows = 3, cols = 4;
int[][] grid = new int[rows][cols]; // 默认值为0

二维数组的遍历

嵌套循环遍历

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(); // 换行
}

常见操作

获取行数和列数

int rowCount = matrix.length; // 行数
int colCount = matrix[0].length; // 列数(假设为矩形数组)

锯齿数组(非矩形)

int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[]{1, 2};
jaggedArray[1] = new int[]{3, 4, 5};

应用场景

  • 矩阵运算(如乘法、转置)。
  • 棋盘类游戏(如围棋、扫雷)。
  • 图像处理(像素矩阵)。

注意事项

  • 避免越界访问(如matrix[-1][0])。
  • 锯齿数组需单独处理每行的长度。
  • 多维数组的深层拷贝需谨慎(浅拷贝问题)。

 

http://www.dtcms.com/a/418626.html

相关文章:

  • 无重复字符的最长子串_优选算法(C++)滑动窗口
  • 提升雾化片性能,关键是精密测量盲孔尺寸
  • Flannel工作原理-Flannel故障案例-镜像拉取策略-secret对接harbor及ServiceAccount实战
  • GitLab高危漏洞可致实例崩溃(CVE-2025-10858 和 CVE-2025-8014)
  • 中铁建设投资集团有限公司网站自己公司怎样做免费的网站
  • 安卓13_ROM修改定制化-----修改rom 实现支持原生安装器 破除厂商定制限制
  • android 字符串工具类(兼容 Android 16+ / API 16,无报错版)
  • 9.28 深度学习10
  • 数据安全合规行业实战解析:金融、医疗与智能网联汽车的破局之道
  • 汽车全景天窗生产线解决方案 - SNK施努卡
  • 汽车地带AutoZone EDI需求分析及对接指南
  • 如何给自己网站做反链家在深圳罗湖
  • 云手机在电商行业中的优势都有哪些
  • 微信小程序入门学习教程,从入门到精通,微信小程序页面制作(2)
  • 漳州本地网站宝安网站开发
  • Pytest框架速成
  • C++设计模式之结构型模式:代理模式(Proxy)
  • 八股已死、场景当立(分布式ID篇)
  • C++指针笔试题1
  • 中英双语 网站 模板网站建设项目验收单
  • 【centos生产环境搭建(二)redis安装】
  • 四川移动网站建设网架报价明细表
  • 网站设计思路WordPress客户端
  • 做试玩网站网站快速排名技术
  • Day30_【NLP 自然语言处理(0)—入门】
  • springboot 配置 HikariDataSource 连接池信息
  • identity mapping kernel image mapping
  • Docker操作命令
  • iOS 26 能耗检测实战指南,升级后电池掉速是否正常 + KeyMob + Instruments 实时监控 + 优化策略
  • perl踩坑系列===正则表达式第2坑---split中的“或”操作符