什么是数组?

数组(Array)是一种数据结构,用来存储同一类型值的集合,适用于集中管理类型相同、用途相近的多个数据。我们可以通过一

个整型下标访问数组中每一个值。例如:使用数组存储所有员工信息,如果 employees 就是一个员工数组,employees[i] 就是获取数组中下标为 i 的员工信息。

如果有一个拥有5个元素的数组 a,数组结构如下图:

如果我们需要访问某个员工,方式如下:

a[0] = 员工1

a[1] = 员工2

a[2] = 员工3

a[3] = 员工4

a[4] = 员工5

注意:数组下标从 0 开始。上图仅仅为了说明数组,实际上数组中存储的是员工对象的堆栈地址。

声明和初始化数组

声明数组变量需要使用[]符号,语法如下:

<数据类型>[] <变量名>;
或者
<数据类型> <变量名>[];

上面“数据类型”可以是基础类型和引用类型。例如:

int[] a;
int a[];
Integer[] a;

上面仅仅声明了数组变量 a,没有对变量 a 进行初始化操作。可以使用 new 运算符去创建一个数组,例如:

int[] a = new int[10];

上面语句创建了一个可以存储10个整数的数组。数组长度可以是常量、变量。例如:

int len = 10;
int[] a = new int[len];
int[] a = new int[10];

注意:

  • 数组一旦创建,则不能修改它的大小。

  • 数组创建后系统会默认进行初始化。如果是数字类型,则默认初始化为0。如果是 boolean 类型数组,则默认初始化为 false。如果是引用类型数组,则默认初始化为 null。

  • 如果只是声明了一个数组变量,系统仅给系统分配引用空间,并没有创建对象,也不会为数组分配空间。

  • 声明数组类型变量时不允许指定数组长度,例如:int[3] a; 这是非法语句

数组初始化

上面介绍了创建数组后,系统会默认进行初始化。但是,有时我们可能需要进行手动进行初始化。例如:我们创建了一个 String 数组,默认引用类型数组的元素会初始化为null,我们希望初始化为空字符串(""),操作如下:

import java.util.Arrays;

public class Demo {

    public static void main(String[] args) {
        String[] strs = new String[10];
        // 方式一
        for(int i = 0 ; i < strs.length; i++) {
            strs[i] = "";
        }
        // 方式二
        Arrays.fill(strs, "");
    }

}

注意,初始化数组时下标范围为 0 ~ (数组长度-1),上面的 strs 数组的范围 0 ~ 9,如果使用 strs[10] = ""; 语句初始化数组元素,会抛出如下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10

这是因为数组下标越界了。

如果你觉得使用上面方式初始化数组太繁琐,Java 提供了静态初始化方式,用法如下:

String[] strs = {"", "", "", "", "", "", "", "", "", ""};

使用上面方式初始化时,数组长度为花括号中元素的个数。也可以写成:

String[] strs = new String[]{"", "", "", "", "", "", "", "", "", ""};

// 非法的
String[] strs = new String[10]{"", "", "", "", "", "", "", "", "", ""};

// 非法的
String[] strs;
strs = new String[]{"", "", "", "", "", "", "", "", "", ""};

数组遍历

遍历数组可以通过 for 语句和 for-each 语句进行遍历。例如:

(1)使用 for 语句遍历数组

public class Demo {

    public static void main(String[] args) {
        String[] strs = new String[5];
        // 初始化数组
        for(int i = 0; i < strs.length; i++) {
            strs[i] = String.valueOf(i + 1);
        }

        // 遍历数组
        for(int i = 0; i < strs.length; i++) {
            System.out.printf("a[%d]=%s\n", i, strs[i]);
        }
    }

}

运行示例,输出结果如下:

a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5

(2)使用 for-each 遍历数组

public class Demo {

    public static void main(String[] args) {
        String[] strs = new String[5];
        // 初始化数组
        for(int i = 0; i < strs.length; i++) {
            strs[i] = String.valueOf(i + 1);
        }

        // 遍历数组
        for(String str : strs) {
            System.out.println(str);
        }
    }

}

运行示例,输出结果如下:

1
2
3
4
5

注意:如果在循环体中需要操作数组下标,推荐使用 for 循环。


说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号