[Java · 铢积寸累] 数据结构 — 数组类型 - 概念引入

#新星杯·14天创作挑战营·第10期#

🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java · 学习手册

0x01:数组类型 — 概念引入

我们以一个需求,来导入 Java 的数组类型。比如录入 5 个学生的成绩,并求其平均值,我们可以这样写:

import java.util.Scanner;
​
public class TestVar {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int total = 0; // 总分
        for (int i = 0; i < 5; i++) {
            System.out.print("请录入第 " + (i + 1) + " 个学生的成绩: ");
            total +=sc.nextInt();
        }
        System.out.println("5 名学生的平均分为: " + (total / 5));
    }
}

OK,平均值是能求了,那么我想知道第 3 个学生的成绩是多少,你能给我输出出来吗?还不能吧。所以这就引出了本章我们将要介绍的数据类型 ”数组“,它就可以帮我们存储每个学生的具体的成绩。

0x02:数组类型 — 概念解析

数组是指一组类型相同的数据的有序集合。数组描述的是相同类型的若干个数据,按照一定先后次序排列组合而成的一种结构。其中,每一个数据都可以被称作是一个元素,每个元素都可以通过一个索引(下标)来访问它们。

数组的四个基本特点如下:

  1. 数组的长度是固定的: 数组一旦被创建,其大小就不能发生改变。

  2. 数组中的元素类型必须一致: 数组中的元素必须是同一类型的,不允许出现混合类型。

  3. 数组类型可以是任何数据类型: 数组可以是任意数据类型,包括基本数据类型和引用类型。

  4. 数组有索引: 数组是有索引的,通过索引我们可以定位某一个元素的内容。索引是从 0 开始,到 数组.length -1 结束。

  5. 数组变量属于引用类型,数组也是对象的一种: 数组中的每个元素相当于该对象的成员变量。数组本身就是一个对象,Java 对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身还是在堆中存储数据的。

0x03:数组类型 — 数组的简单使用

0x0301:数组的声明 & 创建

一个数组由 4 个基本元素构成:数组名称,数组元素、元素索引、数据类型。在 Java 中,声明数组的方式如下:

数据类型[] 数组名;
数组名 = new 数据类型[长度];
-------------------------> 例
int[] x;            // 声明一个 int[] 类型的变量
x = new int[100];   // 为数组 x 分配 100 个元素空间

为了方便获得数组的长度,Java 提供了一个 length 属性,在程序中可以通过“数组名.length”的方式获得数组的长度,即元素的个数。看下面这个例子:

public class TestVar {
    public static void main(String[] args) {
        int[] arr; // 声明一个数组
        arr = new int[10]; // 给数组开辟一个长度为 10 的空间
​
        // 打印数组的长度
        System.out.println(arr.length);
    }
}

0x0302:数组的初始化 & 元素赋值

1. 默认初始化

当数组被成功创建后,如果没有给数组元素赋值,则数组中的元素会被自动赋予一个默认值,根据元素类型的不同,默认初始值也是不一样的,见下表:

数据类型默认初始值
byte short int long0
float double0.0
char一个空字符,即'\u0000'
booleanfalse
引用数据类型null,表示变量不引用任何对象

2. 静态初始化

静态初始化,就是在定义数组的同时为每个元素赋值:

类型[] 数组名 = new 类型[]{元素, 元素, ...};   // 不可以写成 int[] a = new[4]{1, 2, 3, 4}; 编译器会认为数组限定的元素个数[4]与实际存储的元素{1, 2, 3, 4}个数有可能不一致,存在一定的安全隐患。
类型[] 数组名 = {元素, 元素, ...};

看下面这个案例:

public class TestVar {
    public static void main(String[] args) {
        int[] arr = new int[]{10, 20, 30, 40};
        // 打印数组的长度
        System.out.println(arr.length);
​
        int[] arr2 = {50, 60, 70, 80, 90};
        //打印数组的长度
        System.out.println(arr2.length);
    }
}

3. 动态初始化

动态初始化,就是将为数组元素分配空间和赋值的操作分开进行。看下面这个案例(赋值时需要指定下标,数组的下标是从 0 开始算的):

public class TestVar {
    public static void main(String[] args) {
        int[] arr;
        arr = new int[3];
​
        // 赋值
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;
​
        System.out.println(arr[2]); // 打印 arr[2] 元素的值
    }
}

在上面那个案例中,我们创建了一个包含 3 个元素的 int 型数组,其下标范围为 0 ~ 2,问题来了,假设我给下标为 3 的元素赋值,会发生什么呢?

public class TestVar {
    public static void main(String[] args) {
        int[] arr;
        arr = new int[3];
​
        // 赋值
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;
        arr[3] = 4;
​
        System.out.println(arr[2]); // 打印 arr[2] 元素的值
    }
}

💥 Bug:数组索引越界

数组是一个容器,存储到数组中的每个元素都有自己的自动编号,最小值为 0,最大值为数组长度减 1,如果要访问数组存储的元素,必须依赖于索引。在访问数组的元素时,索引不能呢个超出 0 - length-1 的范围,否则程序会报错。

在使用变量引用一个数组时,变量必须指向一个有效的数组对象。如果该变量的值为 null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常。

0x0303:数组的使用

创建数组,并且为数组的元素赋值后,我们就可以使用数组啦。我们可以取出数组中任意下标的元素,并且进行后续的处理:

public class TestVar {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40};
​
        System.out.println("arr 数组的总长度为: " + arr.length);
        System.out.println("arr 数组中下标为 0 的元素为: " + arr[0]);
        System.out.println("arr 数组中下标为 1 的元素为: " + arr[1]);
        System.out.println("arr 数组中最后一个元素的值为: " + arr[arr.length - 1]);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue17 :: Hack3rX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值