Skip to content

数组

数组概述

基本概念

  1. 数组:是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
  2. 数组中使用到的概念:
    • 数组名
    • 下标(或索引)
    • 元素
    • 数组的长度
  3. 数组的特点:
    • 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
    • 创建数组对象会在内存中开辟一整块连续的空间。占据的空间的大小,取决于数组的长度和数组中元素的类型。
    • 数组中的元素在内存中是依次紧密排列的,有序的。
    • 数组,一旦初始化完成,其长度就是确定的。数组的长度一旦确定,就不能修改。
    • 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
    • 数组名中引用的是这块连续空间的首地址。

数组分类

  1. 按照元素来分:
    • 基本数据类型元素的数组:每个元素位置存储基本数据类型的值
    • 引用数据类型元素的数组:每个元素位置存储对象(本质是存储对象的首地址)(在面向对象部分讲解)
  2. 按照纬度来分:
    • 一维数组:存储一组数据
    • 二维数组:存储多组数据,相当于二维表,一行代表一组数据,只是这里的二维表每一行长度不要求一样。

一维数组

一维数组的声明

  1. 格式:
    • 元素的数据类型[] 一维数组的名称;(推荐)
    • 元素的数据类型 一维数组名[]; (不推荐)
  2. 三点明确:
    • 明确数组的维度:在 Java 中数组的符号是[],[]表示一维,[][]表示二维。
    • 明确数组的元素类型:即创建的数组容器可以存储什么数据类型的数据。元素的类型可以是任意的 Java 的数据类型。例如:int、String、Student 等。
    • 明确数组名:就是代表某个数组的标识符,数组名其实也是变量名,按照变量的命名规范来命名。数组名是个引用数据类型的变量,因为它代表一组数据。
  3. 一个不要
    • 在Java中声明数组时不要指定其长度(数组中元素的个数)。例如:int a[5]; (这是非法的)。

一维数组的初始化

一维数组的初始化分为静态初始化和动态初始化

静态初始化

  • 静态初始化:数组变量的初始化和数组元素的赋值操作同时进行,本质是用静态数据(编译时已知)为数组初始化。此时数组的长度由静态数据的个数决定。
java
/**
 * 声明格式:
 * 数据类型[] 数组名 = new 数据类型[]{元素 1,元素 2,元素 3,...};
 *      或
 * 数据类型[] 数组名;
 * 数组名 = new 数据类型[]{元素 1,元素 2,元素 3,...};
 *      或
 * 数据类型[] 数组名 = {元素 1,元素 2,元素 3...};
 */
int[] arr = new int[]{1,2,3,4,5};//正确
//或
int[] arr;
arr = new int[]{1,2,3,4,5};//正确
//或
int[] arr = {1,2,3,4,5};//正确

动态初始化

  • 动态初始化:数组变量的初始化和数组元素的赋值操作分开进行,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。
java
/**
 * 声明格式:
 * 数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
 *      或
 * 数组存储的数据类型[] 数组名字;
 * 数组名字 = new 数组存储的数据类型[长度];
 * 
 * [长度]:数组的长度,表示数组容器中可以最多存储多少个元素,长度一旦指定不可更改
 */
int[] arr = new int[5];
// 或
int[] arr;
arr = new int[5];

一维数组的使用

数组的长度

  • 数组的元素总个数,即数组的长度
  • 每个数组都有一个属性 length 指明它的长度,例如:arr.length 指明数组 arr 的长度(即元素个数)。
  • 每个数组都具有长度,而且一旦初始化,其长度就是确定,且是不可变的。

数组的引用

  • 每一个存储到数组的元素,都会自动的拥有一个编号,从 0 开始,这个自动编号称为数组索引(index)或下标,可以通过数组的索引/下标访问到数组中的元素。
  • Java 中数组的下标从[0]开始,下标范围是[0, 数组的长度-1],即[0, 数组名.length-1]

举例:

java
public class ArrayTest3 {
    public static void main(String[] args) {
    int[] arr = {1,2,3,4,5};
    System.out.println("arr 数组的长度:" + arr.length);
    System.out.println("arr 数组的第 1 个元素:" + arr[0]);//下标从 0开始
    System.out.println("arr 数组的第 2 个元素:" + arr[1]);
    System.out.println("arr 数组的第 3 个元素:" + arr[2]);
    System.out.println("arr 数组的第 4 个元素:" + arr[3]);
    System.out.println("arr 数组的第 5 个元素:" + arr[4]);
    //修改第 1 个元素的值
    //此处 arr[0]相当于一个 int 类型的变量
    arr[0] = 100;
    System.out.println("arr 数组的第 1 个元素:" + arr[0]);
    }
}

数组元素的默认值

  • 数组是引用类型,当我们使用动态初始化方式创建数组时,元素值只是默认值。

举例:

java
public class ArrayTest6 {
    public static void main(String argv[]){
        int a[]= new int[5];
        System.out.println(a[3]); //a[3]的默认值为 0
    }
}

元素类型默认值一览表

二维数组

二维数组的声明

java
/**
 * 语法格式:
 * 推荐
 * 元素的数据类型[][] 二维数组的名称;
 * 
 * 不推荐
 * 元素的数据类型 二维数组名[][];
 * 不推荐
 * 元素的数据类型[] 二维数组名[];
 */
    public class Test20TwoDimensionalArrayDefine {
        public static void main(String[] args) {
        //存储多组成绩
        int[][] grades;
        //存储多组姓名
        String[][] names;
        }
    }

二维数组的初始化

静态初始化

  • 格式举例: int[][] arr = new int[][] { {3,8,2},{2,7},{9,0,1,6}};
  • 说明:定义了一个名称为 arr 的二维数组,二维数组中有三个一维数组。
    • 每一个一维数组中具体元素也都已初始化
    • 第三个一维数组的长度表示方式:arr[2].length;
    • 注意特殊写法情况:int[] x,y[]; x 是一维数组,y 是二维数组。

动态初始化

如果二维数组的每一个数据,甚至是每一行的列数,需要后期单独确定,那么就只能使用动态初始化方式了。动态初始化方式分为两种格式:

格式1:规则二维表:每一行的列数是相同的

java
/**
 * 1.确定行数和列数
 * 元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];
 *      m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行
 *      n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格
 * 
 * 2.再为元素赋新
 * 二维数组名[行下标][列下标] = 值;
 */

页面历史

Released under the CC BY-NC-SA 4.0 License

Copyright © 2024 DevBeginner-Doc