掘金 后端 ( ) • 2024-03-30 14:09

前言

本讲继续讲解了Java的基础语法,数据结构数组,数组也是Java很多数据结构的一个重要部分之一,一般开发中其实很少使用数组,反而用相关集合类,比如List和ArrayList,这些性能以及对应的api调用比数组丰富,我们后续慢慢也会讲解和使用这些集合类。

一、数组是什么

数组是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式

对这些数据进行统一管理。

比如,有一组学生,这样的一组数据,就可以看成数组。

请在此添加图片描述

我们如果需要获取这个学生数组的数据,就可以,通过序号,直接获取。其实在Java数组结构一些常见概念: 数组名 == 学生 下标(或索引) == 序号 元素 == 学生名字 数组的长度

数组的分类

  • 按照维度:一维数组、二维数组、三维数组、…
  • 按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)

二、一维数组

一维数组,比较容易理解,我们可以利用几何知识来解释,一维指的是行,算是比较简单的数组。

1.声明

type var[] 或 type[] var ,type表示数据类型,可以基本数据类型,也可以引用对象数据类型。

例如:

int a[];

int[] a1;

double b[];

String[] c; //引用类型变量数组

数组声明的时候,是不能指定数组的长度的,同时idea开发工具也会提示

请在此添加图片描述

2.初始化

所有变量都会初始化,数组也是不例外的,可以声明和初始化一起,也可以先声明,再初始化,数组初始化的时候需要指定数组的长度。

数组初始化,用关键字 new type[长度],java在内存就会分配指定长度的数组,数组的下标(序号)范围是0 到 长度 - 1。

如声明并初始化一个长度为 3 的int类型数组

int[] arr = new int[3];

先声明,后初始化:

String names[];
names = new String[3];

2.数组元素引用

**数组赋值:**数组赋值,需要指定对应的序号进行赋值,相当于放到对于的坑位。

        String names[];
        names = new String[3];
        names[0] = "小明";
        names[1] = "小红";
        names[2] = "小张";

最终这个数组在内存中的存储结构如下:

请在此添加图片描述

**数组元素获取:**数组名[数组元素下标]

  • 数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
  • 数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 —>n-1;如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]

获取数组第一个元素

请在此添加图片描述

如果获取的序号超过数组定义的长度,则会报错:

请在此添加图片描述

三、多维数组

多维数组,利用几何知识来解释,一维指的是行,二维是面,三维是体,其实在工作中很少会用到多维数组去存储,这一部分可以作为了解,知道有这么一回事。

1.多维数组的使用

上面我们知道一维数组使用的是一个中括号[],那么多维就使用多个,比如二维数组使用的是两个中括号[][],第一个表示横向数据(行),第二个表示纵向数据(列)。比如我们定义一个表格,如三行两列的表格

请在此添加图片描述

用二维数组定义的话,如下:

        String students[][];
        // 定义 3行,2列的数据
        /**
         * (0,0)小明	(0,1)16
         * (1,0)小红	(1,1)17
         * (2,0)小张	(2,1)18
         */
        students = new String[3][2];
        students[0][0] = "小明";
        students[1][0] = "小红";
        students[2][0] = "小张";
        students[0][1] = "16";
        students[1][1] = "17";
        students[2][1] = "18";

所以二维数组作为表格存储,只不过,行竖是从 0 开始,获取二维数组对应元素如下:

        // 获取第一行,第二列,也就是(0,1)
        System.out.println("第一行,第二列:"+students[0][1] );
        // 遍历数组所有元素
        for (int i = 0; i < students.length; i++) {
            for (int j = 0; j < students[i].length; j++) {
                System.out.println("第"+i+"行"+"第"+j+"列:"+students[i][j] );
            }
        }

请在此添加图片描述

四、关于数组常见练习题

本讲内容其实不是很多,初学者主要熟悉一维数组的使用即可,接下来我们用两道练习题,来巩固一下对于数组的理解。

1.定义一个int型的一维数组,包含10个元素,分别赋一些随机整数, 然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。

 public static void main(String[] args) {
        /*
        * 1.定义一个int型的一维数组,包含10个元素,分别赋一些随机整数, 然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
        * */
        int arr[] = new int[10];
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;
        arr[3] = 4;
        arr[4] = 5;
        arr[5] = 6;
        arr[6] = 7;
        arr[7] = 8;
        arr[8] = 9;
        arr[9] = 10;

        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max){
                max = arr[i];
            }
        }

        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < min){
                min = arr[i];
            }
        }

        /*
         2.获取arr数组中所有元素的和(自定义1到10的数组)
        * */
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            sum =sum+arr[i];
        }
        System.out.println("数组arr之和:" + sum);
        System.out.println("数组arr最大值:" + max);
        System.out.println("数组arr最小值:" + min);
        System.out.println("数组arr平均值:" + sum / arr.length);
    }

请在此添加图片描述