1、数组的概述

  1. /*
  2. * 一、数组的概述
  3. * 1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,
  4. * 并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
  5. *
  6. * 2.数组的相关概念:
  7. * >数组名
  8. * >元素
  9. * >角标、下标、索引
  10. * >数组的长度:元素的个数
  11. *
  12. * 3.数组的特点:
  13. * 1)数组属于引用类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型。
  14. * 2)创建数组对象会在内存中开辟一整块连续的空间;
  15. * 3)数组的长度一旦确定,就不能修改;
  16. * 4)数组是有序排列的。
  17. *
  18. * 4.数组的分类:
  19. * ① 按照维数:一维数组、二维数组、三维数组……
  20. * ② 按照数组元素类型:基本数据类型元素的数组、引用类型元素的数组
  21. *
  22. */

2、 一维数组的使用

  1. /*
  2. * ① 一维数组的声明和初始化
  3. * ② 如何调用数组的指定位置的元素
  4. * ③ 如何获取数组的长度
  5. * ④ 如何遍历数组
  6. * ⑤ 数组元素的默认初始化值:见ArrayTest1.java
  7. * ⑥ 数组的内存解析:见ArrayTest1.java
  8. */
  1. public class ArrayTest {
  2. public static void main(String[] args) {
  3. //1. 一维数组的声明和初始化
  4. int num; //声明
  5. num = 10; //初始化
  6. int id = 1001; //声明 + 初始化
  7. int[] ids; //声明
  8. //1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
  9. ids = new int[]{1001,1002,1003,1004};
  10. //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
  11. String[] names = new String[5];
  12. //错误的写法:
  13. // int[] arr1 = new int[]; //未赋值、未指明长度
  14. // int[5] arr2 = new int[5];
  15. // int[] arr3 = new int[3]{1,2,3};
  16. //也是正确的写法:
  17. int[] arr7 = {1,2,3,5,4};//类型推断
  18. /*总结:数组一旦初始化完成,其长度就确定了。
  19. */
  20. //2.如何调用数组的指定位置的元素:通过角标的方式调用。
  21. //数组的角标(或索引)从0开始的,到数组的长度-1结束
  22. names[0] = "张郃";
  23. names[1] = "王陵";
  24. names[2] = "张学良";
  25. names[3] = "王传志"; //charAt(0)
  26. names[4] = "李峰";
  27. // names[5] = "周礼"; //如果数组超过角标会通过编译,运行失败。
  28. //3.如何获取数组的长度
  29. //属性:length
  30. System.out.println(names.length); //5
  31. System.out.println(ids.length); //4
  32. //4.如何遍历数组
  33. // System.out.println(names[0]);
  34. // System.out.println(names[1]);
  35. // System.out.println(names[2]);
  36. // System.out.println(names[3]);
  37. // System.out.println(names[4]);
  38. for(int i = 0;i < names.length;i++){
  39. System.out.println(names[i]);
  40. }
  41. }
  42. }

数组元素的默认初始化值
数组元素是整形:0
数组元素是浮点型:0.0
数组元素是char型:0或’\u0000’,而非’0’
数组元素是boolean型:false
数组元素是引用数据类型:null

  1. /*
  2. * ⑤ 数组元素的默认初始化值
  3. * > 数组元素是整形:0
  4. * > 数组元素是浮点型:0.0
  5. * > 数组元素是char型:0或'\u0000',而非'0'
  6. * > 数组元素是boolean型:false
  7. *
  8. * > 数组元素是引用数据类型:null
  9. */
  10. public class ArrayTest1 {
  11. public static void main(String[] args) {
  12. //5.数组元素的默认初始化值
  13. int[] arr = new int[4];
  14. for(int i = 0;i < arr.length;i++){
  15. System.out.println(arr[i]);
  16. }
  17. System.out.println("*****************");
  18. short[] arr1 = new short[4];
  19. for(int i = 0;i < arr1.length;i++){
  20. System.out.println(arr1[i]);
  21. }
  22. System.out.println("*****************");
  23. float[] arr2 = new float[5];
  24. for(int i = 0;i < arr2.length;i++){
  25. System.out.println(arr2[i]);
  26. }
  27. System.out.println("*****************");
  28. char[] arr3 = new char[5];
  29. for(int i = 0;i < arr3.length;i++){
  30. System.out.println("----" + arr3[i] + "****");
  31. }
  32. if(arr3[0] == 0){
  33. System.out.println("你好!");
  34. }
  35. System.out.println("*****************");
  36. boolean[] arr4 = new boolean[5];
  37. System.out.println(arr4[0]);
  38. System.out.println("*****************");
  39. String[] arr5 = new String[5];
  40. System.out.println(arr5[0]);
  41. //验证
  42. if(arr5[0] == null){
  43. System.out.println("北京天气好差!");
  44. }
  45. }
  46. }

2.1、内存的简化结构

image.png

2.2、一维数组的内存解析

  1. int[] arr = new int[]{1,2,3};
  2. String[] arr1 = new String[4];
  3. arr1[1] = “刘德华”;
  4. arr1[2] = “张学友”;
  5. arr1 = new String[3];
  6. System.out.println(arr1[1]);//null

image.png

3、 多维数组的使用

3.1、二位数组

  1. /*
  2. * 二维数组的使用
  3. *
  4. * 1.理解
  5. * 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
  6. * 其实,从数组底层的运行机制来看,其实没有多维数组。
  7. *
  8. * 2.二维数组的使用:
  9. * ① 二维数组的初始化
  10. * ② 如何调用数组的指定位置的元素
  11. * ③ 如何获取数组的长度
  12. * ④ 如何遍历数组
  13. * ⑤ 数组元素的默认初始化值:见ArrayTest3.java
  14. * ⑥ 数组的内存解析:见ArrayTest3.java
  15. *
  16. */
  17. public class ArrayTest2 {
  18. public static void main(String[] args) {
  19. //1.二维数组的声明和初始化
  20. int[] arr = new int[]{1,2,3};
  21. //静态初始化
  22. int[][] arr1 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
  23. //动态初始化1
  24. String[][] arr2 = new String[3][2];
  25. //动态初始化2
  26. String[][] arr3 = new String[3][];
  27. //错误的情况
  28. // String[][] arr4 = new String[][];
  29. // String[][] arr5 = new String[][4];
  30. // String[][] arr6 = new String[4][3]{{1,2,3},{4,5,6},{7,8,9}};
  31. //正确的情况:
  32. int arr4[][] = new int[][]{{1,2,3},{4,5,12,6},{7,8,9}};
  33. int[] arr5[] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
  34. int[][] arr6 = {{1,2,3},{4,5,6},{7,8,9}};
  35. //2.如何调用数组的指定位置的元素
  36. System.out.println(arr1[0][1]); //2
  37. System.out.println(arr2[1][1]); //null
  38. arr3[1] = new String[4]; //定义arr3的[1]为长度为4的字符数组
  39. System.out.println(arr3[1][0]); //没有上句,会报错
  40. //3.获取数组的长度
  41. System.out.println(arr4.length); //3
  42. System.out.println(arr4[0].length); //3
  43. System.out.println(arr4[1].length); //4
  44. //4.如何遍历二维数组
  45. for(int i = 0;i < arr4.length;i++){
  46. for(int j = 0;j < arr4[i].length;j++){
  47. System.out.print(arr4[i][j] + " ");
  48. }
  49. System.out.println();
  50. }
  51. }
  52. }
  1. /*
  2. * 二维数组的使用:
  3. * 规定:二维数组分为外层数组的元素,内层数组的元素
  4. * int[][] arr = new int[4][3];
  5. * 外层元素:arr[0],arr[1]等
  6. * 内层元素:arr[0][0],arr[1][2]等
  7. *
  8. * ⑤ 数组元素的默认初始化值
  9. * 针对于初始化方式一:比如:int[][] arr = new int[4][3];
  10. * 外层元素的初始化值为:地址值
  11. * 内层元素的初始化值为:与一维数组初始化情况相同
  12. *
  13. * 针对于初始化方式而:比如:int[][] arr = new int[4][];
  14. * 外层元素的初始化值为:null
  15. * 内层元素的初始化值为:不能调用,否则报错。
  16. *
  17. * ⑥ 数组的内存解析
  18. */
  19. public class ArrayTest3 {
  20. public static void main(String[] args) {
  21. int[][] arr = new int[4][3];
  22. System.out.println(arr[0]); //[I@15db9742
  23. System.out.println(arr[0][0]); //0
  24. // System.out.println(arr); //ArrayTest3.java
  25. System.out.println("***********************");
  26. float[][] arr1 = new float[4][3];
  27. System.out.println(arr1[0]); //地址值
  28. System.out.println(arr1[0][0]); //0.0
  29. System.out.println("***********************");
  30. String[][] arr2 = new String[4][2];
  31. System.out.println(arr2[1]); //地址值
  32. System.out.println(arr2[1][1]); //null
  33. System.out.println("*********************");
  34. double[][] arr3 = new double[4][];
  35. System.out.println(arr3[1]); //null
  36. // System.out.println(arr3[1][0]); //报错
  37. }
  38. }

3.2、二维数组的内存解析

  1. int[][] arr1 = new int[4][];
  2. arr1[1] = new int[]{1,2,3};
  3. arr1[2] = new int[4];
  4. arr1[2][1] = 30;

image.png

  1. int[][] arr4= newint[3][];
  2. System.out.println(arr4[0]);//null
  3. System.out.println(arr4[0][0]);//报错
  4. arr4[0] = new int[3];
  5. arr4[0][1] = 5;
  6. arr4[1] = new int[]{1,2};

image.png

  1. int[][] arr = new int[3][];
  2. arr[1] = new int[]{1,2,3};
  3. arr[2] = new int[3];
  4. System.out.println(arr[0]);//null
  5. System.out.println(arr[0][0]);//报异常

image.png