概念
数组:在内存中对多个数据的存储
数组名
数组的元素:内部储存的多个元素
下标(角标/索引/下角标)index
数组长度:存储元素个数
特点
1、元素紧密排列,有序
2、数组属于引用数据类型的变量。数组元素既可以是基本数据类型,也可以是引用数据类型
分类
1、按元素类型:分为基本数据类型元素数组和引用数据类型元素数组
2、按数组维数:一维数组、二维数组……
一维数组
声明和初始化
e.g. double[] array1;//声明
array1 = new double[]{1,2,3};//静态初始化
e.g.String[] array1 = new String[4];//动态初始化
e.g.int[] array1 = new int[4];
int[] array1 = {1,2,3};//类型推断
e.g.
***一旦初始化完成,数组长度确定且不可更改
调用数组指定元素
通过角标
赋值:e.g. array1[0] = "abcd";
数组属性(长度)
length
Array1.length
数组遍历
用for循环:
for(int i = 0,i < array1.length; i++){
System.out.println(array1[i]);
}
数组元素默认初始化
整型:0
浮点型:0.0
字符型:0或'\u0000'
布尔型:flase
引用数据类型:null
一维数组内存解析
内存结构:
程序计数器
虚拟机栈
本地方法栈:存放method中声明的变量
堆heap:存放数组实体(所有元素)
栈stack:先进后出
方法区
若直接用=将数组赋给新数组,会将地址赋值过去,两者指针指向同一个堆,所以两者会一起更改。
二维数组
二维数组理解
一些一维数组是另一个一维数组的元素
e.g.表格
声明和初始化
静态初始化(数组变量赋值和元素赋值同时进行):
Int[][] arr2 = new int[][]{{1,2},{2,3}{4,5}};
动态初始化(数组变量赋值和元素赋值分开进行):
1、Int[][] arr2 = new int[3][2];
/int arr2 [][] = new int[3][2];
2、Int[][] arr2 = new int[3][];
3、String arr2[][] = new String[3][2];
元素调用
先调用外层元素再调用内层元素,一层一层调
数组长度
考虑最外层
遍历
使用嵌套循环
默认初始化
动态初始化方式1:Int[][] arr2 = new int[3][2];
外层元素:打印出来是地址
内层元素:打印出来是
array:值
Boolean: false
String: null
动态初始化方式2:Int[][] arr2 = new int[3][2];
外层元素:打印出来是null
内层元素:打印出来是报错
数组常见算法
1、数值型数组特征值:平均值、最大值、最小值、总和
2、元素赋值
3、复制
4、反转
5、扩容和缩容
6、查找
7、排序