java基础—数组

  • Post author:
  • Post category:java

数组

一维数组

概念

  • 记录单个数据内容时,声明一个变量即可
  • 在程序中记录多个类型相同的数据内容时,声明一个一维数组即可
  • 一维数组的本质是在内存空间中申请一段连续的存储单元
  • 数组是相同数据类型的多个元素的容器:::
  • 元素按线性顺序排列,体现为一种 引用数据类型
    在这里插入图片描述

格式

  • 数据类型[] 数组名称 = new 数据类型[数组长度];
    • 数组长度 在声明的时候进行设定及length属性进行获取
    • 通过下标的方式访问数组中的每一个元素
      数组的下标从 0 开始;对于长度为n的数组,下标的范围是 0 ~ n-1

内存结构分析

  • 内存结构之区 【基本数据类型】
    • 栈用于存放程序运行过程中所有的局部变量。 一个运行的java程序从开始到结束会有多次变量的声明
    • 存放当前变量的值
      int num = 2;
  • 内存结构之区 【引用数据类型】
    • jvm会在内存空间中开辟一个称为“堆”的存储空间,这部分空间用于存储使用new关键字创建的数组和对象
    • 存放当前对象的内存地址
      int[] num = int[2];

一维数组优缺点

  • 优点

    • 直接通过下标(索引)的方式访问指定位置的元素 快速
  • 缺点

    • 所有元素类型必须相同
    • 内存空间必须连续,长度一点确定就不能修改
    • 增加和删除元素时可能移动大量元素,效率低

实践出真理

1.基操

void BaseTest() {
    //定义一个一维数组  int类型、长度为3
    int[] array = new int[3];
    //方式二 不推荐使用,容易与 变量的声明区分,提高代码可读性
    //int array_1[] = new int[3];

    //获取数组的长度
    int array_Length = array.length;
    System.out.println("数组的长度为: " + array_Length);
    for (int i = 0; i < array_Length; i++) {
        System.out.println("当前下标为: " + i + "  的内容是: " + array[i]);
    }

    //在声明的同时进行赋值    静态方式简化版
    char[] chars = {'a', 'b', 'c', 'd'};
    //方式二  静态方式
    boolean[] bool = new boolean[]{false, true, true, false};
    for (int i = 0; i < chars.length; i++) {
        System.out.println("当前下标为: " + i + "  的内容是: " + chars[i] + "\tbool中的内容为: " + bool[i]);
    }

}

运行结果:在这里插入图片描述

2.增删改查操作

void AddDelChaIns() {
    int[] arr = new int[5];
    // 将 “11、22、33、44”按顺序从头(下标为0)进行赋值
    // arr[0] = 11;
    // arr[1] = 22;
    // arr[2] = 33;
    // arr[3] = 44;
    //简化操作
    for (int i = 0; i < arr.length - 1; i++) {
        arr[i] = (i + 1) * 11;
    }
    System.out.print("赋值后--数组中的内容为: ");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "  ");
    }
    System.out.println();

    //将 “55” 插入 头部位置(下标为0)
    for (int i = arr.length - 1; i > 0; i--) {
        arr[i] = arr[i - 1];
    }
    arr[0] = 55;
    System.out.print("插入后--数组中的内容为: ");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "  ");
    }
    System.out.println();

    //将 55 从头部位置删除
    for (int i = 0; i < arr.length - 1; i++) {
        arr[i] = arr[i + 1];
    }
    arr[arr.length - 1] = 0;
    System.out.print("删除后--数组中的内容为: ");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "  ");
    }
    System.out.println();

    //查找 22
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == 22) {
            arr[i] = 330;
            break;
        }
    }
    System.out.print("修改后--数组中的内容为: ");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "  ");
    }
    System.out.println();
}

运行结果: 在这里插入图片描述

3.数组间的拷贝(复制)

void Copy() {
    int[] arr = {11, 22, 33, 44, 55};
    int[] co = new int[3];

    //粗暴
    co[0] = arr[1];
    co[1] = arr[2];
    co[2] = arr[3];
    //温柔一点
    for (int i = 0; i < co.length; i++) {
        co[i] = arr[i + 1];
    }
    //util
    System.arraycopy(arr, 1, co, 0, 3);
}

  • 数组拷贝 co = arr 操作 :
    直接用数组arr中的内容覆盖co中的内容

4.统计用户输入的任意整数中各个数字出现的次数

void StatisticsNum() {
    int[] numArr = new int[10];
    System.out.println("请输入任意一个正整数:");
    Scanner sc = new Scanner(System.in);
    int numInput = sc.nextInt();
    System.out.println("输入的数字为: " + numInput);
    int temp = numInput;
    int num = 0;
    while (temp > 0) {
        num = temp % 10;
        temp /= 10;
        numArr[num] = numArr[num] + 1;
    }

    for (int i = 0; i < numArr.length; i++) {
        if (numArr[i] <= 0) continue;
        System.out.print("\n数字 " + i + "\t出现的次数为: " + numArr[i]);
    }
}

运行结果: 在这里插入图片描述

5.保存并计算学生的总成绩与平均分

void StudentScore() {
    System.out.println("请输入学生人数");
    Scanner sc = new Scanner(System.in);
    int studentCount = sc.nextInt();

    int[] scores = new int[studentCount];
    int score = 0;
    int total = 0;
    for (int i = 0; i < studentCount; i++) {
        System.out.println("请输入第 " + (i + 1) + " 个学生的成绩");
        score = sc.nextInt();
        scores[i] = score;
        total += score;
    }
    for (int i = 0; i < studentCount; i++) {
        System.out.println("第 " + (i + 1) + " 个学生的成绩为: " + scores[i]);
    }
    System.out.println("学生的总成绩为: " + total + "\n平均分为: " + total * 1.0 / studentCount);
}

运行结果:在这里插入图片描述

数组工具类

  • java.util.Arrays
  • 功能:对数组中元素的遍历、查找、排序等操作

实践出真理

1. 遍历 toString
  ```java
  int [] array = new int[5];
  System.out.println("当前数组中的元素为: "+Arrays.toString(array));
  //当前数组中的元素为: [0,0,0,0,0]
  ```
2. 填充指定值 fill
  ```java
  Arrays.fill(array,3);
  System.out.println("当前数组中的元素为: "+Arrays.toString(array));
  //当前数组中的元素为: [3,3,3,3,3]
  ```
3. 判断两个数组元素内容次序是否相同 equals
  ```java
  int[] arr = {4,4,4,4,3};
  System.out.println(Arrays.equals(arr,array));       //  false
  Arrays.fill(arr,3);
  System.out.println(Arrays.equals(arr,array));       //  true
  ```
4. 排序 sort 从小到大的顺序
  ```java
  int[] arr_Order = {12,52,36,21,10};
  Arrays.sort(arr_Order)
  System.out.println(Arrays.toString(arr_Order))
  // [10,12,21,36,52]
  ```
5. 查找参数指定元素所在的位置 binarySearch
  ```java
  System.out.println(" 36分在数组中的下标位置是: " + Arrays.binarySearch(arr_Order,36))
  //   36分在数组中的下标位置是: 3
  ```
  - 如果要查找的元素不存在数组中,则输出 -2

二维数组

概念与格式

  • 本质上有多个一维数组摞在一起组成的数组

  • 二维数组中的每个元素都是一维数组:::

  • !!一维数组中的每个元素才是数据内容 !!
    在这里插入图片描述

  • 声明和使用

  • 数据类型[][] 数组名称 = new 数据类型[行数][列数];

  • 数据类型[][] 数组名称 = {{元素1,元素2,元素3,元素…},{},{},{}};

    int[][] arr_Two = new int[2][3];
    int tempValue = 0;
    //初始化并赋值
    //方式一 初始化的同时进行赋值
    int[][] arr_Two ={{0,1,2},{3,4,5}};	   
    //方式二 通过遍历的方式进行赋值 
    for (int i = 0; i < arr_Two.length; i++) {
        for (int j = 0; j < arr_Two[i].length; j++) {
            arr_Two[i][j] = tempValue++;
        }
    }
    for (int i = 0; i < arr_Two.length; i++) {
        for (int j = 0; j < arr_Two[i].length; j++) {
            System.out.print(arr_Two[i][j] + "\t");
        }
        System.out.println();
    }
    
    

    结果输出: 在这里插入图片描述

实践出真理

  1. 杨辉三角
    在这里插入图片描述
void YangHuiTriangle() {
    System.out.println("请输入要显示的行数: ");
    Scanner sc = new Scanner(System.in);
    int row = sc.nextInt();
    int[][] yh = new int[row][];
    for (int i = 0; i < row; i++) {
        yh[i] = new int[i + 1];
        for (int j = 0; j <= i; j++) {
            if (0 == j || i == j) {
                yh[i][j] = 1;
            } else {
                yh[i][j] = yh[i - 1][j] + yh[i - 1][j - 1];
            }
        }
    }
    for (int i = 0; i < row; i++) {
        for (int j = 0; j <= i; j++) {
            System.out.print(yh[i][j] + "\t");
        }
        System.out.println();
    }

}

运行结果:在这里插入图片描述


版权声明:本文为qq_39245001原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。