1、数组概述

1)数组的定义

  • 相同类型数据的有序集合
  • 数组元素:每一个数据
  • 访问:每个数组元素可通过下表来访问

    2、数组声明创建

    1)代码示例

    ```java package com.array;

public class Demo01 { public static void main(String[] args) { // 1、 声明数组 // 2、创建数组 // 3、赋值 int [] nums; nums = new int[10]; } }

  1. <a name="WRwSr"></a>
  2. ### 3、数组使用
  3. <a name="QX220"></a>
  4. #### 1) 内存分析
  5. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12881754/1622365996943-0813680f-4e33-4ace-9290-2e8a3ab71fe3.png#clientId=u665660f6-df33-4&from=paste&height=276&id=udca58e6f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=552&originWidth=1475&originalType=binary&size=346491&status=done&style=none&taskId=ud3c28486-97ec-45eb-abb2-cfa42b5d33b&width=737.5)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12881754/1622366354052-b858ce4b-8357-4a7d-99cc-5eeaf3c199d1.png#clientId=u665660f6-df33-4&from=paste&height=311&id=u009aee4a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=622&originWidth=1117&originalType=binary&size=84862&status=done&style=none&taskId=u8d85b89c-ebf1-4137-85c1-c61e7662573&width=558.5)
  6. <a name="h3hp7"></a>
  7. #### 2) 三种初始化
  8. ```java
  9. package com.array;
  10. public class Demo02 {
  11. public static void main(String[] args) {
  12. // 1、静态初始化: 创建 + 赋值
  13. int [] a = {1,2,3,4,5,6,7,8,9};
  14. // 2、动态初始化 包含默认初始化值是0
  15. int [] b = new int[2];
  16. b[0] = 1;
  17. System.out.println(b[0]); // 1
  18. System.out.println(b[1]); // 0
  19. //数组的默认初始化
  20. /*
  21. 数组是引用类型,元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
  22. */
  23. }
  24. }

3) 数组的四个特点

image.png

4) 数组边界

image.png

5)数组使用

  • for-each循环
  • 数组作方法入参
  • 数组作返回值 ```java package com.array;

import java.util.Arrays;

public class Demo03 { public static void main(String[] args) { int[] nums = {1,2,3,4,5};

// for (int array:nums) { // System.out.println(array); // } // printArrays(nums); int [] reverArrays = reverseArrays(nums); for (int item: reverArrays) { System.out.println(item); } } // 数组作为方法入参 public static void printArrays(int[] arrays){ for(int i = 0; i < arrays.length; i ++){ System.out.println(arrays[i]); } } // 数组作为返回值 反转数组 public static int [] reverseArrays(int [] arrays){ int [] result = new int [arrays.length]; for(int i = 0,j = arrays.length -1; i < arrays.length; i ++,j —){ result [i] = arrays[j]; } return result; }

}

  1. <a name="AR60v"></a>
  2. ### 4、多维数组
  3. <a name="lqSrd"></a>
  4. #### 1) 代码示例
  5. ```java
  6. int [] [] arraysTwo = {{1,2},{3,4}};
  7. for (int [] itemArray:
  8. arraysTwo) {
  9. for (int item:
  10. itemArray) {
  11. System.out.println(item);
  12. }
  13. }

5、Arrays 类

1) 定义

image.png

2) 冒泡排序

image.png

  1. package com.array;
  2. import java.util.Arrays;
  3. public class Demo04 {
  4. public static void main(String[] args) {
  5. int [] arrays = {1,2,3,4,5};
  6. System.out.println(Arrays.toString(arrays));
  7. }
  8. }
  9. #####################################
  10. package com.array;
  11. import java.util.Arrays;
  12. public class Demo04 {
  13. public static void main(String[] args) {
  14. int [] arrays = {1,2,3,4,5};
  15. int [] srotArrays = sortArrays(arrays);
  16. for (int item:
  17. srotArrays) {
  18. System.out.println(item);
  19. }
  20. }
  21. public static int [] sortArrays(int [] arrays){
  22. for(int i = 0;i < arrays.length-1; i ++){
  23. int temp = 0;
  24. boolean flag = false;
  25. for (int j = 0; j< arrays.length -1-i; j ++){
  26. if (arrays[j+1] > arrays[j]){
  27. temp = arrays[j];
  28. arrays[j] = arrays[j+1];
  29. arrays[j+1] = temp;
  30. flag = true;
  31. }
  32. }
  33. if(!flag){
  34. break;
  35. }
  36. }
  37. return arrays;
  38. }
  39. }

6、稀疏数组

  • 概念 - 记录有效值,变成新数组

    1) 问题引用

    image.png

    2) 定义

    image.png ```java package com.array;

public class Demo05 { public static void main(String[] args) { // 1、创建一个二维数组,11*11, 0:没有棋子 1-黑棋 2-白棋 int [] [] originArrays = new int[11][11]; originArrays[1][2] = 1; originArrays[2][3] = 2; // 2、输出原始数组 for (int[] originArray : originArrays) { for (int item : originArray) { System.out.print(item + “\t”); } System.out.println(); } // 3、转换稀疏数组保存 // 获取有效值个数 int sum = 0; for(int i = 0; i < originArrays.length; i ++ ){ for (int j = 0; j < originArrays.length; j++) { if(originArrays[i][j] != 0){ sum ++; } } } System.out.println(“有效值个数:” + sum); // 创建稀疏数组的数组 int [][] array02 = new int[sum+1][3]; array02[0][0] = 11; array02[0][1] = 11; array02[0][2] = sum;

  1. int count = 0;
  2. // 读取稀疏数组
  3. for (int i = 0; i < originArrays.length; i++) {
  4. for (int j = 0; j < originArrays.length; j++) {
  5. if(originArrays[i][j] != 0){
  6. count ++ ;
  7. array02[count][0] = i;
  8. array02[count][1] = j;
  9. array02[count][2] = originArrays[i][j];
  10. }
  11. }
  12. }
  13. System.out.println("##############################");
  14. for (int [] array:
  15. array02) {
  16. for (int item:
  17. array) {
  18. System.out.print(item + "\t");
  19. }
  20. System.out.println();
  21. }
  22. System.out.println("###############################");
  23. // 还原
  24. int [][] array03 = new int[array02[0][0]][array02[0][1]];
  25. for (int i = 1; i < array02.length; i++) {
  26. array03[array02[i][0]][array02[i][1]] = array02[i][2];
  27. }
  28. for (int [] array:
  29. array03) {
  30. for (int item:
  31. array) {
  32. System.out.print(item + "\t");
  33. }
  34. System.out.println();
  35. }
  36. }

}

#

F:\my-learning\ES\jdk1.8.0_251\bin\java.exe “-javaagent:F:\java\IntelliJ IDEA 2021.1\lib\idea_rt.jar=53029:F:\java\IntelliJ IDEA 2021.1\bin” -Dfile.encoding=UTF-8 -classpath F:\my-learning\ES\jdk1.8.0_251\jre\lib\charsets.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\deploy.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\access-bridge-64.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\cldrdata.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\dnsns.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\jaccess.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\jfxrt.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\localedata.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\nashorn.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\sunec.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\sunjce_provider.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\sunmscapi.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\sunpkcs11.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\ext\zipfs.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\javaws.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\jce.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\jfr.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\jfxswt.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\jsse.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\management-agent.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\plugin.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\resources.jar;F:\my-learning\ES\jdk1.8.0_251\jre\lib\rt.jar;F:\javacode\JavaSE\out\production\基础语法;F:\javacode\JavaSE\lib\kotlin-stdlib.jar;F:\javacode\JavaSE\lib\kotlin-reflect.jar;F:\javacode\JavaSE\lib\kotlin-test.jar;F:\javacode\JavaSE\lib\kotlin-stdlib-jdk7.jar;F:\javacode\JavaSE\lib\kotlin-stdlib-jdk8.jar com.array.Demo05 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
有效值个数:2

#

11 11 2
1 2 1
2 3 2

#

0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

进程已结束,退出代码为 0 ```