数组
-
数组(Array), 是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
-
数组的常见概念
1.数组名
2.下标(或索引)
3.元素
4.数组的长度:元素的个数 -
数组的特点
数组是有序排列的
数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
数组的长度一旦确定,就不能修改。
可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
-
数组的分类
1.按照维数: 一维数组,二为数组
2.按照数组元素的类型,基本数据类型元素的数组,引用数据类型元素的数组 -
数组元素的默认初始化值
1.数组元素是整型: 0
2.数组元素是浮点型: 0.0
3.数组元素是char型, 0或'u0000',而非'0'
4.数组元素是boolean型,false
5.数组元素是引用数据类型: null
java 内存构成
多维数组
- 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。
- 对于二维数组的理解,我们可以看成是一堆数组 array1 又作为另一个一维数组 array2 的元素而存在,其实,从数组底层的运行机制来看,其实没有多维数组。
public class ArrayTest2 {
public static void main(String[] args) {
//1. 二维数组的声明和初始化
// 静态初始化1
int [][] arr1 = new int[][] {{1,2,3},{4,5},{6,7,8}};
// 静态初始化2
int[] arr4[] = new int[][] {{1,2,3},{4,5},{6,7,8}};
// 静态初始化3
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};
// 动态初始化1
String[][] arr2 = new String[3][2];
// 动态初始化2
String[][] arr3 = new String[3][];
//2.如何调用数组的指定位置的元素
System.out.println(arr1[0][1]); //2
System.out.println(arr2[1][1]); //null
//System.out.println(arr3[1][0]); //报错
arr3[1] = new String[4];
System.out.println(arr3[1][0]); //null
//3.获取数组的长度
System.out.println(arr4.length); //3
System.out.println(arr4[0].length);//3
//4.遍历二维数组
for(int i = 0; i < arr4.length; i++) {
for(int j = 0; j < arr4[i].length; j++) {
System.out.print(arr4[i][j] + " ");
}
System.out.println();
}
}
}
二维数组
- 二维数组分为外层数组的元素,内层数组的元素
例如: int [][] arr = new int[4][3];
外层元素: arr[0], arr[1]等
内层元素:arr[0][0], arr[1][2] - 数组元素的默认初始化值
针对初始化方式一:比如 int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对初始化方式二:比如 int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错
二维数组内存解析
public class ArrayTest3 {
public static void main(String[] args) {
int [][] arr = new int[4][3];
System.out.println(arr[0]); //[I@182decdb <- 一元数组地址值
System.out.println(arr[0][0]); //0
System.out.println(arr); //[[I@7637f22 <- 二元数组地址值
System.out.println("********************************");
float[][] arr1 = new float[4][5];
System.out.println(arr1[0]); //[F@4926097b
System.out.println(arr1[0][0]); //0.0
System.out.println("********************************");
String[][] arr2 = new String[4][2];
System.out.println(arr2[1]); //[Ljava.lang.String;@2d363fb3
System.out.println(arr2[1][1]); //null
}
}