文章目录
一、数组
数组: 是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
- 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
- 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是 这块连续空间的首地址。
- 数组的长度一旦确定,就不能修改。
- 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
- 分类:按维度分为一维、二维等;按照元素的数据类型分为基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)。
二、数组的使用
1.一维数组
①如何对一维数组进行声明和初始化?
–首先指明数组元素类型,由于数组本身是引用数据类型,所以需要new。如
int[] ids;//声明为int型数组
ids = new int[]={21,22,23};//初始化
以上为静态初始化过程(数组元素为基本数据类型,数组初始化和数组元素的赋值操作同时进行);
对于动态初始化(数组初始化和数组元素的赋值操作分开进行),则写法为
String[] names = new String[5];
②如何获取数组长度及遍历数组?
String[] names = new String[3];
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
System.out.println(names.length); //打印出该数组长度
for(int i = 0;i<names.length;i++) //遍历输出
{
System.out.println(names[i]);
}
③对数组的内存解析
内存的简化: 简单分为栈和堆,栈中存的局部变量(放方法中的变量均为局部变量),堆中存的new出来的结构,如图(参考尚硅谷学习)。
理解分析: 右上角为示例部分代码,以第一行为例分析,arr在main方法中,是局部变量,存入栈中;右侧new出了长度为3的数组,存入堆中;三个连续的单元有首地址值,假设为0x34ab(十六进制),会将其赋给栈空间中的arr,则其会通过此地址值找到堆中的数组,从而联系起来;然后进行赋值为1 2 3(因为默认为0 0 0)。
2.多维数组
分析二维数组:可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
①声明与初始化
静态初始化:
int[][] arr1 = new int[][]{{2,3,4},{2,5},{1,2,3,4}};
动态初始化:
int[][] arr2 = new int[3][2];
②长度与遍历
//获取数组长度
int[][] arr3 = new int[][]{{2,3,4},{2,5},{1,2,4}};
System.out.println(arr3[].length);//3
System.out.println(arr3[0].length); //3
System.out.println(arr3[1].length); //2
for(int i = 0;i<arr3.length;i++) //遍历输出
{
for(int j = 0;j<arr3[i].length;j++) {
System.out.print(arr3[i][j]+" ");
}
}