目录
概述
数组(Array)
特点
声明与初始化
一维数组
一维数组元素的引用
一维数组的遍历
一维数组元素的默认初始化值
一维数组的内存解析
二维数组
二维数组元素的默认初始化值
二维数组的内存结构
数组的赋值与复制的理解
Arrays工具类的使用
数组的常见异常
是多个相同类型数据按一定顺序排列的集合,并用一个名字命名,通过编号的方式对这些数据进行统一管理。
1、数组是有序排列的。
2、数组属于引用数据类型的变量。
3、数组的元素既可以是基本数据类型,也可以是引用数据类型。
4、数组创建时,会在内存中开辟一整块连续的空间。
5、数组的长度一旦确定就不能修改。
int[] nums; //声明
//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
nums = new int[]{1024, 1025, 1026};
//1.2 动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[10];
//2 类型推断
int[] arr = {1, 2, 3, 4, 5, 6};
通过角标的方式调用
//数组的角标(索引)从0开始,到数组的长度-1为止
String[] names = new String[3];
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
}
数组元素是整型:0
数组元素是浮点型:0.0
数组元素是char型:0或'\u0000',而不是'0'
数组元素是boolean型:false
数组元素是引用数据类型:null
如果一个一维数组的元素是一维数组类型的,则称此数组为二维数组。
//静态初始化
int[][] arr1 = new int[][]{{1,1,1},{2,3},{4,5,6}};
//动态初始化
//方式一:
String[][] arr2 = new String[3][5];
//方式二:
String[][] arr3 = new String[5][];
//也可以这样写
int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8,9}};
int[] arr5[] = {{1,1,1},{2,3},{4,5,6}}; //类型推断
//二维数组元素的调用:角标
System.out.println(arr1[1][1]); //3
System.out.println(arr2[2][1]); //null
//属性
System.out.println(arr4.length); //3
System.out.println(arr4[1].length); //2
System.out.println(arr4[2].length); //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[3][4];
外层元素:arr[0], arr[1]等
内层元素:arr[0][0], arr[1][2]等
初始化方式一: int[][] arr = new int[3][4];
外层元素的初始化值:地址值
内层元素的初始化值:与一维数组初始化情况相同
初始化方式二: int[][] arr = new int[3][];
外层元素的初始化值:null
内层元素的初始化值:不能调用,否则会报错
int[] array1, array2;
array1 = new int[]{1,2,3,4};
赋值:
array2 = array1;
将array1保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体。
复制:
array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
array2[i] = array1[i];
}
通过new的方式,给array2在堆空间中新开辟了数组的空间,将array1数组中的元素值一个一个的赋值到array2数组中。
Arrays定义在java.util包下,提供了很多操作数组的方法。
// boolean equals(int[] a,int[] b):判断两个数组是否相等
int[] arr1 = new int[]{1,2,3};
int[] arr2 = new int[]{1,2,3};
boolean isEquals = Arrays.equals(arr1, arr2);
System.out.println(isEquals);
// String toString(int[] a):输出数组信息
System.out.println(Arrays.toString(arr1));
// void fill(int[] a,int val):将指定值填充到数组之中
Arrays.fill(arr1, 666);
System.out.println(Arrays.toString(arr1));
// void sort(int[] a):对数组进行排序
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
// int binarySearch(int[] a,int key):返回目标元素的下标
int [] arr3 = new int[] {-9,-4,0,4,5,89,90,111,444,666,888};
int index = Arrays.binarySearch(arr3, 666);
if(index>=0)
System.out.println(index); //9
else
System.out.println("没找到!");
1.数组角标越界异常:ArrayIndexOutOfBoundsException
2.空指针异常:NullPointerException