在 Java 中初始化数组

原文:https://www.studytonight.com/java-examples/initializing-arrays-in-java

数组是一种线性数据结构,用于以有序的方式存储相似的元素。数组是一种非常简单但功能强大的数据结构,可用于各种任务。存储在数组中的每个元素都可以通过使用其索引值来访问。数组遵循从零开始的索引,这意味着第一个索引将为零。在本教程中,我们将学习用 Java 初始化数组的不同方法。

Structure of an Array

在 Java 中声明数组

在初始化之前,我们必须知道如何声明数组。声明意味着定义变量名称和将存储在数组中的元素的数据类型。下面的代码显示了声明数组的一般语法。

datatype[] variableName;

在 Java 中初始化数组

让我们学习一下给数组赋值的不同方法。

将所有数组元素初始化为零

我们可以简单地声明一个数组,并在一行代码中将数组的每个元素初始化为零。零是 Java 在我们声明数组大小时分配的默认值。下面的代码演示了这个场景。

public class InitializeDemo
{
    public static void main(String[] args)
    {
        //Declaring array
        int[] intArray;
        //Initializing to Zero
        intArray = new int[5];
        //Printing the values
        for(int i = 0; i < intArray.length; i++)
            System.out.println(intArray[i]);
    }
}

0 0 0 0 0

对于字符串数组,默认值为 null。

public class InitializeDemo
{
    public static void main(String[] args)
    {
        //Declaring array
        String[] strArray;
        //Initializing to Zero
        strArray = new String[5];
        //Printing the values
        for(int i = 0; i < strArray.length; i++)
            System.out.println(strArray[i]);
    }
}

零 零 零 零 零

一次初始化一个数组元素

我们并不总是想在数组中存储零。我们可以在单个 for 循环的帮助下逐个初始化每个元素。我们将使用元素的索引来初始化数组。

例如,让我们初始化一个数组来存储前 5 个自然数的平方。

public class InitializeDemo
{
    public static void main(String[] args)
    {
        //Declaring array
        int[] intArray;
        //Defining the array length
        intArray = new int[5];
        //Initializing
        for(int i = 0; i < intArray.length; i++)
            intArray[i] = (i+1) * (i+1);
        //Printing the values
        for(int i = 0; i < intArray.length; i++)
            System.out.println(intArray[i]);
    }
}

1 4 9 16 25

如果我们使用多维数组,那么我们需要使用嵌套循环。下面的代码显示了如何初始化 2D 数组。

public class InitializeDemo
{
    public static void main(String[] args)
    {
        //Declaring array
        int[][] intArray;
        //Defining the array length
        intArray = new int[3][4];

        //Initializing
        for(int i = 0; i < intArray.length; i++)
            for(int j = 0; j < intArray[0].length; j++)
                intArray[i][j] = (i+1) * (j+1);

        //Printing the values
        for(int i = 0; i < intArray.length; i++)
        {
            for(int j = 0; j < intArray[0].length; j++)
                System.out.print(intArray[i][j] + " ");
            System.out.println();
        }

    }
}

1 2 3 4 2 4 6 8 3 6 9 12

我们也可以通过扫描仪类获取用户输入来初始化数组。

import java.util.Scanner;

public class InitializeDemo
{
    public static void main(String[] args)
    {
        //Declaring array
        int[] intArray;
        //Defining the array length
        intArray = new int[5];

        Scanner s = new Scanner(System.in);
        System.out.println("Enter the values: ");
        //Initializing
        for(int i = 0; i < intArray.length; i++)
            intArray[i] = s.nextInt();
        s.close();

        System.out.println("The array contains: ");
        //Printing the values
        for(int i = 0; i < intArray.length; i++)
            System.out.println(intArray[i]);
    }
}

输入数值: 5 10 15 20 25 数组包含: 5 10 15 20 25

在声明时初始化数组

我们可以声明一个数组,同时用一行代码初始化它。当使用这种技术初始化时,我们不需要指定数组的大小。

public class InitializeDemo
{
    public static void main(String[] args)
    {
        //Declaring array
        int[] intArray = {3,6,9,12,15};

        //Printing the values
        for(int i = 0; i < intArray.length; i++)
            System.out.println(intArray[i]);
    }
}

3 6 9 12 15

使用数组.填充()方法

Arrays 类为我们提供了 fill()方法,该方法可以用一些元素填充整个数组或数组的一部分。此方法无法初始化数组,它用于修改已经初始化的数组。

如果我们使用下面的签名,那么数组的所有元素都将被设置为 value 参数。

public static void fill(int[] intArray, int value)

相反,如果我们使用以下语法,那么 fromIndex 和 toIndex 之间的所有元素(不包括)都将被设置为 value 参数。

public static void fill(int[] intArray, int fromIndex, int toIndex, int value)

下面的代码演示了 fill()方法的工作原理。我们也可以使用其他数据类型的数组。

import java.util.Arrays;

public class InitializeDemo
{
    public static void main(String[] args)
    {
        int[] intArray = new int[10]; //Array initialized with zeroes.
        System.out.println("Initial Array: " + Arrays.toString(intArray));
        Arrays.fill(intArray, -5);//Changing all the elements to -5
        System.out.println("Changing all elements of the array: " + Arrays.toString(intArray));

        int fromIdx = 1, toIdx = 5;
        Arrays.fill(intArray, fromIdx, toIdx, 0);//Changing some elements back to 0
        System.out.println("Changing a few elements of the array: " + Arrays.toString(intArray));
    }
}

初始数组:【0,0,0,0,0,0,0,0,0,0,0】 更改数组的所有元素:[-5,-5,-5,-5,-5,-5,-5,-5,-5,-5] 更改数组的一些元素:[-5,0,0,0,0,-5,-5,-5,-5]

使用 Arrays.setAll()方法

Arrays类的 setAll()方法可以在生成器函数的帮助下初始化数组。这个生成器函数通过使用索引来计算数组值。

例如,让我们尝试用前 10 个自然数的平方初始化一个数组。

import java.util.Arrays;

public class InitializeDemo
{
    public static void main(String[] args)
    {
        //Declaring array
        int[] intArray;

        intArray = new int[10];
        //Initializing using setAll()
        Arrays.setAll(intArray, (index) -> (index+1) * (index+1) );

        //Printing the values
        for(int i = 0; i < intArray.length; i++)
            System.out.println(intArray[i]);
    }
}

1 4 9 16 25 36 49 64 81 100

现在,让我们尝试初始化一个字符串数组。如果一个元素的指数小于 5,那么它应该有值 < 5 ,否则它应该有值 > =5

import java.util.Arrays;

public class InitializeDemo
{
    public static void main(String[] args)
    {
        //Declaring array
        String[] strArray;

        strArray = new String[10];
        //Initializing using setAll()
        Arrays.setAll(strArray, (index) -> ((index < 5) ? "<5" : ">=5" ));

        //Printing the values
        for(int i = 0; i < strArray.length; i++)
            System.out.println("Index: " + i + " Value: " + strArray[i]);
    }
}

指数:0 值:< 5 指数:1 值:< 5 指数:2 值:< 5 指数:3 值:< 5 指数:4 值:< 5 指数:5 值:> =5 指数:6 值:> =5 指数:7 值:> =5 指数:8 值:> =5

使用 ArrayUtils.clone()方法

我们可以使用 clone()方法通过复制或克隆另一个数组来初始化一个数组。这仅用于创建现有数组的副本。它是 Apache Commons Lang 3 包的一部分。

import org.apache.commons.lang3.ArrayUtils;

public class InitializeDemo
{
    public static void main(String[] args)
    {
        int[] intArray = {1, 3, 5, 7, 9};
        int[] copy = ArrayUtils.clone(intArray);

        for(int i = 0; i < copy.length; i++)
            System.out.println(copy[i]);
    }
}

1 3 5 7 9

使用 Arrays.copyOf()方法

我们还可以使用 Arrays 类的 copyOf()方法来创建另一个数组的副本。

此方法采用一个额外的整数参数来表示要复制的元素数量。

  • 如果此参数小于原始数组的长度,则只复制前几个元素。
  • 如果它大于原始数组的长度,那么额外的元素将被初始化为零。
  • 如果它完全等于原始数组的长度,则创建一个精确的副本。
import java.util.Arrays;

public class InitializeDemo
{
    public static void main(String[] args)
    {
        int[] intArray = {1, 3, 5, 7, 9};
        int[] copy1 = Arrays.copyOf(intArray, 3);
        int[] copy2 = Arrays.copyOf(intArray, 7);
        int[] copy3 = Arrays.copyOf(intArray, 5);

        System.out.println("Original Array: " + Arrays.toString(intArray));
        System.out.println("Copied array with smaller length: " + Arrays.toString(copy1));
        System.out.println("Copied array with greater length: " + Arrays.toString(copy2));
        System.out.println("Copied array with same length: " + Arrays.toString(copy3));
    }
}

原始数组:[1,3,5,7,9] 长度较小的复制数组:[1,3,5] 长度较大的复制数组:[1,3,5,7,9,0,0] 长度相同的复制数组:[1,3,5,7,9]

常见问题

问:初始化和声明数组有什么区别?

声明意味着设置将存储在数组中的元素的名称和数据类型。初始化意味着给数组元素设置一个初始值。

问:什么是动态数组?

动态数组是可以动态调整大小的数组。普通数组的大小是固定的,如果它们已经满了,我们就不能在其中插入额外的元素,但是动态数组没有这个问题。

问:如何将整数数组的所有元素初始化为 0?

如上所述,如果我们将空间分配给一个数组,那么默认情况下,所有数组元素都设置为 0。我们还可以使用其他方法,如 fill()和 setAll()来实现这一点。

摘要

数组是最常用的线性数据结构之一。Java 中有很多初始化数组的方法。大多数情况下,我们将使用 for 循环来初始化数组的元素,但是必须知道也可以用于初始化的不同方法。我们还学习了如何使用 clone()和 copyOf()方法将现有数组的内容复制到新数组中。