以下为本人学习尚硅谷2023版java第5章的笔记。
1.数组,一旦初始化完成,其长度就是确定的。数组的长度一旦确定,就不能修改。
2.对于基本数据类型而言,默认初始化值各有不同。
对于引用数据类型而言,默认初始化值为null(注意与0不同!)
3.数组下标为什么是0开始?
因为第一个元素距离数组首地址间隔0个单元格。
4. int[ ]x, y[ ];
//x是一维数组,y是二维数组,因为int[ ]是一个整体
int[ ] x,y[ ]; 在给x,y变量赋值以后,以下选项允许通过编译的是:x: 一维int[ ] y: 二维int[ ] [ ]
a) x[0] = y; //no
b) y[0] = x; //yes
c) y[0][0] = x; //no
d) x[0][0] = y; //no
e) y[0][0] = x[0]; //yes
f) x = y; //no
5.数组的几种格式
int[][] arr = {{1,2,3},{4,5,6},{7,8,9,10}}; int[][] arr1 = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}}; int[] arr2[] = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}}; int arr3[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}}; int [][]arr4; arr4 = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}}; int[][] arr5 = new int[2][]; String arr6[][] = new String[3][4];
错误写法:
int[ ][ ] arr;
arr = new int[3][3]{{1,2,3},{4,5,6},{7,8,9,10}};//静态初始化右边new 数据类型[][]中不能写数字
6.二维数组元素的默认初始值
动态初始化方式1(比如:int[ ][ ] arr1 = new int[3][2];)
1)外层元素:默认存储地址值
2)内层元素:默认与一维数组的不同类型的默认值规定相同。见本文中2.
int[][] arr1 = new int[3][2]; //外层元素默认值 System.out.println(arr1[0]); //[I@7ef20235 地址 //内层元素默认值 System.out.println(arr1[0][0]); // 0 boolean[][] arr2 = new boolean[3][4]; //外层元素默认值 System.out.println(arr2[0]); //地址 //内层元素默认值 System.out.println(arr2[0][1]); // false String[][] arr3 = new String[4][2]; //外层元素默认值 System.out.println(arr3[0]); //[Ljava.lang.String;@4f3f5b24 //内层元素默认值 System.out.println(arr3[0][0]); // null
动态初始化方式2(比如:int[ ][ ] arr4 = new int[4][ ];)
1)外层元素:默认存储null
2)内层元素:不存在。调用会报错。
int[ ][ ] arr4 = new int[4][ ];
//外层元素默认值
System.out.println(arr4[0]); //null
//内层元素默认值
System.out.println(arr4[0][0]); // 空指针异常,报错
7.数组赋值 ,此时修改array2 ,array1的值也会变,因为指向的是同一个内存空间
数组复制,此时修改array2, array1不会变,因为指向不同的内存空间。比如复制文件夹,删除复制来的文件夹中的文件时,原来的文件夹中的文件不会被删除。
8.常见的算法时间复杂度由小到大依次为:O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
9.十大内部排序算法
10.数组有没有length()这个方法? String有没有length()这个方法?
数组没有length(),是length属性。
String有length()
11.为什么数组要从0开始编号,而不是1
数组的索引,表示了数组元素距离首地址的偏离量。因为第1个元素的地址与首地址相同,所以偏移量就是0。所以从0开始.