数组概述

1-数组(Array)

数组是多个相同类型数据按一定顺序排列的集合,并使用一个名字,通过编号的方式对这些数据进行统一管理。

2-数组相关概念

  • 数组名
  • 元素
  • 角标、下标、索引
  • 数组的长度:元素的个数

3-数组的特点

  1. 数组是有序排列的
  2. 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  3. 创建数组对象会在内存中开辟一整块连续的空间
  4. 数组的长度一旦确定,就不能修改

4-数组的分类

  1. 根据维数:一维数组、二维数组…
  2. 根据数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组

一维数组

1-一维数组的声明与初始化

  1. 正确的方式:
  2. int num;//声明
  3. num = 10;//初始化
  4. int id = 1001;//声明 + 初始化
  5. int[] ids;//声明
  6. //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
  7. ids = new int[]{1001,1002,1003,1004};
  8. //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
  9. String[] names = new String[5];
  10. int[] arr4 = {1,2,3,4,5};//类型推断
  11. 错误的方式:
  12. // int[] arr1 = new int[];
  13. // int[5] arr2 = new int[5];
  14. // int[] arr3 = new int[3]{1,2,3};

2-一维数组元素的引用(通过角标的方式调用)

  1. //数组的角标(或索引从0开始的,到数组的长度-1结束。
  2. names[0] = "王铭";
  3. names[1] = "王赫";
  4. names[2] = "张学良";
  5. names[3] = "孙居龙";
  6. names[4] = "王宏志";//charAt(0)

3-数组的属性:length

  1. System.out.println(names.length);//5
  2. System.out.println(ids.length);
  3. 说明:
  4. 数组一旦初始化,其长度就是确定的。arr.length
  5. 数组长度一旦确定,就不可修改。

4-一维数组的遍历

  1. for(int i = 0;i < names.length;i++){
  2. System.out.println(names[i]);
  3. }

5-一维数组元素的默认初始化值

  • 数组元素是整型:0
  • 数组元素是浮点型:0.0
  • 数组元素是char型:0或’/u0000’,而非’0’
  • 数组元素是boolean型:false
  • 数组元素是引用数据类型:null

    6-一维数组的内存解析

    image.png

二维数组

1-二维数组理解

数组属于引用数据类型
数组的元素也可以是引用数据类型
一个一维数组A的元素如果还是一个一维数组类型的,则此数组A称为二维数组

2-二维数组的声明与初始化

  1. 正确的方式:
  2. int[] arr = new int[]{1,2,3};//一维数组
  3. //静态初始化
  4. int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
  5. //动态初始化1
  6. String[][] arr2 = new String[3][2];
  7. //动态初始化2
  8. String[][] arr3 = new String[3][];
  9. //也是正确的写法:
  10. int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
  11. int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断
  12. 错误的方式:
  13. // String[][] arr4 = new String[][4];
  14. // String[4][3] arr5 = new String[][];
  15. // int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};

3-二维数组元素调用

  1. System.out.println(arr1[0][1]);//2
  2. System.out.println(arr2[1][1]);//null
  3. arr3[1] = new String[4];
  4. System.out.println(arr3[1][0]);
  5. System.out.println(arr3[0]);

4-二维数组的属性

  1. System.out.println(arr4.length);//3
  2. System.out.println(arr4[0].length);//3
  3. System.out.println(arr4[1].length);//4

5-遍历二维数组元素

  1. for(int i = 0;i < arr4.length;i++){
  2. for(int j = 0;j < arr4[i].length;j++){
  3. System.out.print(arr4[i][j] + " ");
  4. }
  5. System.out.println();
  6. }

6-二维数组的默认初始化

  1. * 规定:二维数组分为外层数组的元素,内层数组的元素
  2. * int[][] arr = new int[4][3];
  3. * 外层元素:arr[0],arr[1]等
  4. * 内层元素:arr[0][0],arr[1][2]等
  5. *
  6. * 数组元素的默认初始化值
  7. * 针对于初始化方式一:比如:int[][] arr = new int[4][3];
  8. * 外层元素的初始化值为:地址值
  9. * 内层元素的初始化值为:与一维数组初始化情况相同
  10. *
  11. * 针对于初始化方式二:比如:int[][] arr = new int[4][];
  12. * 外层元素的初始化值为:null
  13. * 内层元素的初始化值为:不能调用,否则报错。

7-二维数组的内存结构

image.png

Arrays工具类的使用

Arrays工具类定义在java.util包下,提供很多操作数组的方法

  1. //1.boolean equals(int[] a,int[] b):判断两个数组是否相等。
  2. int[] arr1 = new int[]{1,2,3,4};
  3. int[] arr2 = new int[]{1,3,2,4};
  4. boolean isEquals = Arrays.equals(arr1, arr2);
  5. System.out.println(isEquals);
  6. //2.String toString(int[] a):输出数组信息。
  7. System.out.println(Arrays.toString(arr1));
  8. //3.void fill(int[] a,int val):将指定值填充到数组之中。
  9. Arrays.fill(arr1,10);
  10. System.out.println(Arrays.toString(arr1));
  11. //4.void sort(int[] a):对数组进行排序。
  12. Arrays.sort(arr2);
  13. System.out.println(Arrays.toString(arr2));
  14. //5.int binarySearch(int[] a,int key)
  15. int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
  16. int index = Arrays.binarySearch(arr3, 210);
  17. if(index >= 0){
  18. System.out.println(index);
  19. }else{
  20. System.out.println("未找到");
  21. }

数组的常见异常

  1. 数组角标越界异常:ArrayIndexOutOfBoundsException ```java 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”);

  1. 2. 空指针异常:NullPointerException
  2. ```java
  3. // 情况一:
  4. // int[] arr1 = new int[]{1,2,3};
  5. // arr1 = null;
  6. // System.out.println(arr1[0]);
  7. //情况二:
  8. // int[][] arr2 = new int[4][];
  9. // System.out.println(arr2[0][0]);
  10. //情况:
  11. String[] arr3 = new String[]{"AA","BB","CC"};
  12. arr3[0] = null;
  13. System.out.println(arr3[0].toString());

一旦程序出现异常,未处理时,就终止执行。