以下内容为本人观看尚硅谷Java学习视频所做的笔记
数组
数组:多个相同类型数据按一定顺序排列的组合,使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
数组的特点:
1、有序排列
2、属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
3、创建数组对象会在内存中开辟一整块连续的空间
4、数据的长度一旦确定,就不能修改
数组的分类:
1、按照维数:一维数组、二维数组……
2、按照元素类型:基本数据类型元素的数组、引用数据类型元素的数组
一维数组的使用:
1、一维数组的声明和初始化:
int[] ids;//声明
ids = new int[]{1001,1002,1003};//静态初始化:数组的初始化和数组元素的赋值操作同时进行
String[] names = new String[5];//动态初始化:数组的初始化和数组元素的赋值操作分开进行
其他正确写法:
String names[] = new String[5];
int[] arr4 = {1,2,3,4,5};
错误的写法:
int[] arr1 = new int[];
int[5] arr2 = new int[5];
int[] arr3 = new int[3]{1,2,3};
int[] ids; ids = {1,2,3,4,5};
总结:数组一旦初始化完成,长度就确定了
2、如何调用数组的指定位置的元素:通过角标的方式调用
数组的角标(或索引)从0开始的,到数组的长度-1结束
names[0] = “James”;
names[1] = “Curry”;
3、如何获取数组的长度
属性:length
names.length
4、遍历数组
for(int i = 0; i < names.length; i++)
5、数组元素的默认初始化值
整型:0
浮点型:0.0
char型:0或‘\u0000’(但不是‘0’),输出时候表现为空格
boolean型:false
引用数据类型:null
6、数组的内存解析
二维数组:
1、对于二维数组的理解:
对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组
2、二维数组的使用:
①二维数组的声明和使用
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}; //静态初始化
String[][] arr2 = new String[3][2]; //动态初始化1
String[][] arr3 = new String[3][]; //动态初始化2
其他正确写法:
int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8]};
错误的写法:
String[][] arr4 = new String[][4];
String[4][3] arr5 = new String[][];
int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};
②调用数组指定位置的元素
arr1[0][1];
③获取数组的长度
int[][] arr4 = new int[][]{{1,2,3},{4,5},{6,7,8}};
arr4.length为3
arr4[0].length为3
arr4[1].length为2
④数组的遍历
for(int i = 0; i < arr.length; i++)
for(int j = 0; j < arr[i].length; j++)
⑤数组元素的默认初始化值
针对初始化方式1:比如int[][] arr = new int[4][3];
外层元素初始化值:地址值
内层元素的初始化值:与一维数组初始化情况相同
针对初始化方式2:比如int[][] arr = new int[4][];
外层元素的初始化值:null
内存元素的初始化值:不能调用,否则报错
例:
int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
arr为一个地址值
arr[0]为一个地址值
arr[0][0]为0
-----------------------------------
int[][] arr = new int[4][];
arr[1]为null
输出arr[1][0]会报错
⑥数组的内存解析
数组复制问题:
array1是一个数组,我们进行操作array2 = array1,是将array1的地址赋给了array2,这时候修改array2中的元素的值,array1元素的值也会发生改变,因为它们的地址是相同的,堆中实际上只有一个数组。所以 array2 = array1不算数组的复制。
注意:如果array1是一个一维数组,array2是一个二维数组,那么array1 = array2的操作是不允许的,因为虽然array1和array2实际上存的都是一个地址值,但是两个的变量类型不一样。赋值操作要求变量类型需要一致
数组的正确复制操作:
array2 = new int[array1.length];
for(int i = 0;i < array2.length; i++){
array2 = array1[i];
}
数组中的常见异常:
1、数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
下标超过了数组范围
2、空指针异常:NullPointerException
就是数组变量此时并未存储地址值,存的是null,但是要去访问数组的内容,就会造成空指针异常。
例如:
int[] array = new int[]{1,2,3};
array = null;
System.out.println(array[0]);
Arrays工具类的使用
java.until.Arrays类即为操作数组的工具类,包含了用来操作数组的各种方法
方法举例:
boolean equals(int[] a, int[] b) — 判断两个数组是否相等
String toString(int[] a) — 输出数组信息
void fill(int[] a, int val) — 将指定值填充到数组之中(将数组中所有元素的值设置为指定值)
void sort(int[] a) — 对数组进行排序
int binarySearch(int[] a, int key) — 对排序后的数组进行二分法检索指定的值,返回该值的所在元素的下标,返回负数则意味着没找到指定值
调用方法的形式:Arrays.xxx(yyy),xxx为方法名,yyy为参数列表