java - 数组
数组说明
数组是相同类型的变量按顺序组成的一种复合数据类型,称这些相同类型的变量为数组的元素或单元。通过数组名加索引来使用数组的元素。
数组属于引用类型变量,本质是对象。参考 文档
数组的声明
声明数组:数组的类型+数组变量的名称(简称数组名)
声明一维数组
-
数组的元素类型 数组名[];
float numbers[];
-
数组的元素类型[] 数组名
推荐
float[] numbers;
声明多维数组
-
数组的元素类型 数组名[];
float numbers[][];
-
数组的元素类型[] 数组名
推荐
float[][] numbers;
-
数组的元素类型[] 数组名[];
float[] numbers[];
分配变量
声明数组后,必须
采用new
关键字进行内存空间分配
数组名 = new 数组元素的类型[数组元素的个数]
//一维数组声明和分配
int[] numbers;
numbers = new int[10];
//二维数组声明和分配
int[][] numbers;
numbers = new int[3][10];
动态初始化 type[] arrayName = new type[number];
//动态初始化一维数组声明和分配
int[] numbers = new int[4];
//动态初始化二纬数组声明和分配
int[][] numbers = new int[2][3];
静态初始化 type[] arrayName = {value, value...}
//静态初始化一维数组声明和分配
String[] names = {"smile","dylan"};
//静态初始化二维数组声明和分配
String[][] names = {{"smile"},{"smile"}};
栈空间数组变量存储的地址指向堆空间数组中第一个元素的地址
一维数组内存分析图:
二维数组内存分析图
数组的初始化
创建数组后,系统会给数组中每一个元素一个默认值
int->0,short->0,byte->0,long->0,float->0.0,double->0.0,char->\u000,boolean->false,String->null
使用数组
数组通过索引访问自己的元素。数组的第一个元素是从下标0
开始
//一维数组使用
int[] numbers = {1,2,3};
int myNumber = numers[0];
//二维数组使用
int[][] numbers = {{1,2,3},{4,5,6}};
int myNumber = numbers[0][0];
数组中的元素的个数称为数组的长度。通过属性值length
获取到数组的长度
//一维数组使用
int[] numbers = {1,2,3};
System.out.println(numbers.length);
//一维数组使用
int[][] numbers = {{1,2,3},{1,2,3}};
System.out.println(numbers.length);
分别输出结果为:3 2
数组的引用
数组属于引用类型
变量,因此两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素
int[] numbers1 = {1,2,3};
int[] numbers2 = numbers1;
numbers2[0] = 0;
System.out.println(numbers1[0]);
采用静态声明的方式,声明一个int[]
变量numbers1
,将number1
的值,赋值给numbers2
,修改numbers2
的值,我们发现numbers1
的值也发生了变化。
将数组赋值给另外一个变量的时候,必须保证两个变量的数据类型保持一致
数组的遍历
-
普通for循环
for(int i =0; i < array.lenth;i++) { //采用下标进行数组的访问 System.out.println(array[i]); }
-
特殊for循环
for(int value : array) { System.out.println(value); } //value 的类型,必须和数组中声明的类型保持一致
当数组的下标超出数组的最大下标(array.length-1),会抛出常
java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
多维数组(二维数组)
二维数组实际上是由多个一维数组组成,它的各个一维数组的长度可以相同,也可以不同。
int[][] numbers = new int[2][];
for(int i = 0; i< numbers.length; i++) {
numbers[i] = new int[i+1];
}
//输出的结果为 1 2
for(int[] array : numbers) {
System.out.println(array.length);
}
杨辉三角使用
public int[][] Yanghui(int number) {
int[][] numbers = new int[number][];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = new int[i+1];
for (int j = 0; j < i+1; j++) {
if (j == 0 || j == i) {
numbers[i][j] = 1;
} else {
numbers[i][j] = numbers[i-1][j-1] + numbers[i-1][j];
}
}
}
return numbers;
}
数组常用的方法
-
复制数组(Arrays.copyOf)
int[] numbers1 = {1,2,3}; int[] numbers2 = Arrays.copyOf(numbers1,numbers1.length);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现