一、数组的构成:
- 数组名
- 元素
- 角标、下标(索引)
- 数组的长度
二、数组的特点
- 数组是有序列的
- 数组属于引用数据类型变量,数组的元素 既可以是基本数据类型也可以是引用数据类型
- 创建数据对象会在内存中开辟一整块连续的空间
- 数组的长度一旦确定,就不能修改
三、数组的分类
- 维数:一维、二维…
- 按照数组元素的类型:基本、引用
四、一维数组的使用
- 一维数组的使用:
- 一位数组的声明和初始化
int num; //声明
num = 10; //初始化
int id = 1001;
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
int[] ids; //声明
ids = new int[]{1001,1102,103,1004};//初始化
//动态初始化:数组的初始化和数组元素赋值操作分开进行
String[] names = new String[5];
总结:数组一旦初始化完成,其长度就确定了
- 如何调用数组指定位置的元素
通过调用数组:角标、下标(索引)
//数组的角标从0开始到数组的length-1结束
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
names[3] = "11";
names[4] = "22";
- 如何获取数组的长度
//获取数组的长度:length
System.out.println(names.length);
- 如何遍历数组
//遍历数组
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
- 数组元素的默认初始化值
数组的默认初始化值
整型:默认值都是0
浮点型:默认值0.0
char:ASCI码对应的 0 而非’0’
boolean:false
引用数据类型:null
测试用例:
public class Text2 {
public static void main(String[] args){
int[] arr = new int[4];
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
short[] arr1 = new short[4];
for(int i = 0;i < arr1.length;i++){
System.out.println(arr[i]);
}
float[] arr2 = new float[4];
for(int i = 0;i < arr2.length;i++){
System.out.println(arr[i]);
}
char[] arr3 = new char[4];
for(int i = 0;i < arr3.length;i++){
System.out.println("**"+arr[i]+"**");
}
boolean[] arr4 = new boolean[4];
System.out.println(arr3[0]);
}
}
五、数组的内存分配
六、多维数组
- 二维数组的使用
1.初始化
//静态初始化
int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化
String[][] arr1 = new String[3][2]; //1
String[][] arr2 = new String[3][]; //2
//特殊写法(也正确)
int[] arr = {1,2,3,4};
int[][] arr = {{1,2,3},{4,5},{6,7,8}};
2.调用多维数组
//调用多维数组
System.out.println(arr[0][1]);
arr2[1] = new String[4];//一行划分四个
3.获取长度
System.out.println(arr.length);//结果:3
System.out.println(arr[0].length);//结果:3
System.out.println(arr[1].length);//结果:2
4.遍历二维数组
//遍历二维数组
for(int i = 0;i <= arr.length;i++){
for(int j = 0;j < arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
- 规定:二维数组分为外层数组的元素和内层数组的元素
-
int[][] arr = new int[4][3];
-
外层元素:arr[0],arr[1]等
-
内层元素:arr[]0[0],arr[1][2]等
- 数组元素的默认初始化值
外层初始化值为地址
内层初始化值与一维初始化值一样
测试:
public class Text5 {
public static void main(String[] args) {
int[][] arr = new int[4][3];
System.out.println(arr[0]); //地址 [I@15db9742
System.out.println(arr[0][0]); //0
System.out.println(arr); //[[I@6d06d69c
}
}
- 数组内存解析
七、Arrays工具类的使用
public class Text1 {
public static void main(String[] args) {
//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[] arr = new int[]{-87,23,16,95,74,22,45,46,221}; 二分查找必须是有序数组
int[] arr = new int[]{-98,23,37,45,89,222,312};
int index = Arrays.binarySearch(arr, 45);
System.out.println(index); //如果是负数 则说明没找到
}
}
八、数组中的常见异常
- 1.数组角标越界异常:ArrayIndexOutOfBoundsException
- 2.空指针异常: NullPointerException
测试:
public class Text2 {
public static void main(String[] args) {
//1.数组角标越界的异常
int[] arr = new int[]{1,2,3,4,5};
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
//2.空指针异常
// 情况一
// int[] arr1 = new int[]{1,2,3};
// arr1 = null;
// System.out.println(arr1[0]);
// int[][] arr2 = new int[4][];
// System.out.println(arr2[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());
}
}