目录
0. 相关文章链接
1. 数组的概述
2. 一维数组
2.1. 声明和初始化
2.2.?通过角标的方式调用和其中的length属性
2.3. 数组的默认初始化值
2.4. 数组的遍历
2.5. 数组的内存解析
3. 二维数组
3.1. 二维数组的概述
3.2.?二维数组的声明与初始化
?3.3. 二维数组的调用和属性
3.4. 二维数组的遍历和默认初始化值
3.5. 二维数组的内存解析
4. 数组中的常见算法
4.1. 数组元素的反转
4.2. 数组中指定元素的查找
4.3. 数组中排序算法的时间复杂度对比
4.4. 冒泡排序代码
5. Arrays工具类的使用
6. 数组中的常见异常
6.1.?数组角标越界异常:ArrayIndexOutOfBoundsException
6.2.?空指针异常:NullPointerException
0. 相关文章链接
1. 数组的概述
① 数组的理解:数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名, ?并通过编号的方式对这些数据进行统一管理。 ? ② 数组相关的概念: ?>数组名 ?>元素 ?>角标、下标、索引 ?>数组的长度:元素的个数 ? ③ 数组的特点: ?>数组是序排列的 ?>数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型 ?>创建数组对象会在内存中开辟一整块连续的空间 ?>数组的长度一旦确定,就不能修改。 ? ④ 数组的分类: ?>照维数:一维数组、二维数组、。。。 ?>照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组
⑤?数据结构: ?>数据与数据之间的逻辑关系:集合、一对一、一对多、多对多 ?>数据的存储结构:线性表、树形结构等
2. 一维数组
2.1. 声明和初始化
正确的方式:
int num;//声明
num = 10;//初始化
int id = 1001;//声明 + 初始化
int[] ids;//声明
//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001,1002,1003,1004};
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
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};
2.2.?通过角标的方式调用和其中的length属性
//数组的角标(或索引从0开始的,到数组的长度-1结束。
names[0] = "王铭";
names[1] = "王赫";
names[2] = "张学良";
names[3] = "孙居龙";
names[4] = "王宏志";//charAt(0)
System.out.println(names.length);//5
System.out.println(ids.length);
说明: 数组一旦初始化,其长度就是确定的。arr.length 数组长度一旦确定,就不可修改。
2.3. 数组的默认初始化值
> 数组元素是整型:0 > 数组元素是浮点型:0.0 > 数组元素是char型:0或'\u0000',而非'0' > 数组元素是boolean型:false > 数组元素是引用数据类型:null
2.4. 数组的遍历
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
}
2.5. 数组的内存解析
3. 二维数组
3.1. 二维数组的概述
数组属于引用数据类型 数组的元素也可以是引用数据类型 一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组。
3.2.?二维数组的声明与初始化
正确的方式:
int[] arr = new int[]{1,2,3};//一维数组
//静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化1
String[][] arr2 = new String[3][2];
//动态初始化2
String[][] arr3 = new String[3][];
//也是正确的写法:
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{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}};
?3.3. 二维数组的调用和属性
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
arr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);//
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//4
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
* 内层元素的初始化值为:不能调用,否则报错。
3.5. 二维数组的内存解析
4. 数组中的常见算法
4.1. 数组元素的反转
//方法一:
// for(int i = 0;i < arr.length / 2;i++){
// String temp = arr[i];
// arr[i] = arr[arr.length - i -1];
// arr[arr.length - i -1] = temp;
// }
//方法二:
// for(int i = 0,j = arr.length - 1;i < j;i++,j--){
// String temp = arr[i];
// arr[i] = arr[j];
// arr[j] = temp;
// }
4.2. 数组中指定元素的查找
① 线性查找
实现思路:通过遍历的方式,一个一个的数据进行比较、查找。 适用性:具有普遍适用性。
② 二分法查找
实现思路:每次比较中间值,折半的方式检索。 适用性:(前提:数组必须有序)
4.3. 数组中排序算法的时间复杂度对比
4.4. 冒泡排序代码
int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};
//冒泡排序
for(int i = 0;i < arr.length - 1;i++){
for(int j = 0;j < arr.length - 1 - i;j++){
if(arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
5. Arrays工具类的使用
① 定义在java.util包下。 ② Arrays:提供了很多操作数组的方法。
//1.boolean equals(int[] a,int[] b):判断两个数组是否相等。
int[] arr1 = new int[]{1,2,3,4};
int[] arr2 = new int[]{1,3,2,4};
boolean isEquals = Arrays.equals(arr1, arr2);
System.out.println(isEquals);
//2.String toString(int[] a):输出数组信息。
System.out.println(Arrays.toString(arr1));
//3.void fill(int[] a,int val):将指定值填充到数组之中。
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));
//4.void sort(int[] a):对数组进行排序。
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//5.int binarySearch(int[] a,int key)
int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
int index = Arrays.binarySearch(arr3, 210);
if(index >= 0){
System.out.println(index);
}else{
System.out.println("未找到");
}
6. 数组中的常见异常
6.1.?数组角标越界异常:ArrayIndexOutOfBoundsException
int[] arr = new int[]{1,2,3,4,5};
for(int i = 0;i <= arr.length;i++){
System.out.println(arr[i]);
}
System.out.println(arr[-2]);
System.out.println("hello");
6.2.?空指针异常:NullPointerException
//情况一:
//int[] arr1 = new int[]{1,2,3};
//arr1 = null;
//System.out.println(arr1[0]);
//情况二:
//int[][] arr2 = new int[4][];
//System.out.println(arr2[0][0]);
//情况:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());
|