在 Java 中增加数组大小

Mohammad Irfan 2023年10月12日
  1. 在 Java 中通过创建另一个新数组来增加数组大小
  2. 使用 Java 中的 Arrays.copyOf() 方法增加数组大小
  3. 在 Java 中使用 ArrayList 数组增加数组大小
  4. 在 Java 中增加数组大小
在 Java 中增加数组大小

本教程介绍如何在 Java 中增加数组大小。你还有一些示例代码可以帮助你理解该主题。

Java 中的数组是相同类型数据的有限集合。数组大小固定,创建后不能修改长度。这是因为数组作为连续数据块存储在内存中。

用户必须预先定义它们的大小以确保所需的内存量是连续可用的。在本指南中,你将了解解决数组固定长度问题的不同方法。

让我们首先看看当我们尝试将元素添加到没有额外空间的数组时会发生什么。我们通常通过访问其索引将项目添加到数组中。如果我们尝试使用下一个索引将项目添加到已经满的数组,Java 将返回一个 ArrayIndexOutOfBoundsException

以下代码是此类场景的示例。

public class Main {
  public static void main(String[] args) {
    int[] arr = new int[3];
    arr[0] = 5;
    arr[1] = 10;
    arr[2] = 15;
    arr[3] = 20; // Index 3 is out of bounds
  }
}

输出:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    at abc.Demo.main(Demo.java:13)

现在让我们尝试了解如何克服这个问题。

在 Java 中通过创建另一个新数组来增加数组大小

数组固定大小的一个简单解决方案是创建另一个更大的数组。

我们可以使用计数器变量来跟踪插入数组的元素数量。每当这个数字等于数组的长度(表示数组已满)时,我们就可以创建一个比原始数组大一倍的新数组。

接下来,我们将所有元素从原始数组转移到新数组,并且仍然有一个新元素的额外空间。如果我们收到一个新元素并且没有足够的空间来容纳它,我们可以重复这个过程。

考虑以下代码,我们创建了一个长度为 5 的数组,并尝试在其中插入 7 个元素。每当数组变满时,我们就使用 increaseSize() 方法增加其大小。

public class Main {
  public static int[] increaseSize(int[] arr) {
    int[] newArr = new int[arr.length + 1]; // Creating a new array with space for an extra element
    for (int i = 0; i < arr.length; i++) {
      newArr[i] = arr[i]; // Copying the elements to the new array
    }
    return newArr;
  }
  public static void main(String[] args) {
    int[] arr = new int[5];
    int counter = 0;
    for (int i = 0; i <= 6; i++) {
      if (counter == arr.length) {
        arr = increaseSize(arr);
      }
      arr[i] = i * 2;
      counter += 1;
    }
    for (int i = 0; i < arr.length; i++) {
      System.out.print(arr[i] + " ");
    }
  }
}

输出:

0 2 4 6 8 10 12

使用 Java 中的 Arrays.copyOf() 方法增加数组大小

Java 有一个内置的 copyOf() 方法,它可以创建一个更大的新数组,并将我们的旧数组元素复制到新数组中。

copyOf() 函数属于 Arrays 类。此方法的语法如下所示。它返回一个具有上述长度的数组,其中包含原始数组的所有元素。

copyOf(originalArray, newLength)

下面的代码与上面提到的类似。唯一的区别是我们使用 copyOf 方法而不是 increaseSize() 方法。

import java.util.Arrays;
public class Main {
  public static void main(String[] args) {
    int[] arr = new int[5];
    int counter = 0;
    for (int i = 0; i <= 6; i++) {
      if (counter == arr.length) {
        int[] newArr = Arrays.copyOf(arr, arr.length + 1);
        arr = newArr;
      }
      arr[i] = i * 2;
      counter += 1;
    }
    for (int i = 0; i < arr.length; i++) {
      System.out.print(arr[i] + " ");
    }
  }
}

输出:

0 2 4 6 8 10 12

在 Java 中使用 ArrayList 数组增加数组大小

ArrayList 是一个在 java.util 包中的动态数组,它实现了 List 接口。与普通数组不同,ArrayList 具有可变长度。

Java 会自动处理这个动态数组的大小,我们不用担心数组空间不足。它的默认大小是 10 个元素,但如果添加更多元素,它的大小会增加。

下表解释了数组和 ArrayList 之间的一些主要区别。

大批 数组列表
数组不可调整大小,并且在创建后将始终具有固定长度。 ArrayList 是一个可变大小的数组,如果需要额外的空间,它的大小会动态增加。
数组可以包含原始数据类型和对象。 ArrayList 只能存储对象,不能存储原始数据类型。原始数据类型在将它们添加到列表之前被转换为相应的对象。 (整数到整数,双倍到双倍)
数组的性能优于 ArrayList,因为可以在恒定时间内使用索引添加、删除或获取元素。 ArrayLists 比数组稍慢,因为如果我们需要额外的空间,它们需要调整大小。
可以通过使用其索引来访问元素。 有像 get()set()add() 这样的专用方法来访问和修改 ArrayList 中的元素。我们不能直接使用方括号中的索引来访问元素。

以下代码解释了如何使用 ArrayLists 并执行基本操作,例如添加元素、修改元素和打印列表值。

import java.util.ArrayList;
public class Main {
  public static void main(String[] args) { // Creating a new ArrayList to hold Integer values
    ArrayList<Integer> arrList = new ArrayList<Integer>();
    // Adding elements 5, 10, 15 and 20 to the ArrayList
    arrList.add(5);
    arrList.add(10);
    arrList.add(15);
    arrList.add(20);
    // Printing the ArrayList
    System.out.println(arrList);
    // Adding an element 7 at index 2. This will shift the rest of the elements one place to the
    // right
    arrList.add(2, 7);
    System.out.println(arrList);
    // Fetching the element at index 3
    System.out.println(arrList.get(3));
    // Changing the element present at index 1 to 17
    arrList.set(1, 17);
    System.out.println(arrList);
  }
}

输出:

[5、10、15、20]
[5, 10, 7, 15, 20]
15
[5, 17, 7, 15, 20]

我们尝试将 7 个元素添加到长度为 5 的数组的场景可以通过使用 ArrayLists 轻松解决。请记住,我们不能在 ArrayLists 中使用像 int 这样的原始数据类型,因此我们使用包装类 Integer

import java.util.ArrayList;
public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> arrList = new ArrayList<Integer>();
    for (int i = 0; i <= 6; i++) {
      arrList.add(i * 2);
    }
    for (int i = 0; i < arrList.size(); i++) {
      System.out.print(arrList.get(i) + " ");
    }
  }
}

输出:

0 2 4 6 8 10 12

在 Java 中增加数组大小

数组是一种基本但极其重要和有用的数据结构。数组的一个限制是它们的大小是固定的,并且它们的大小不能动态增加。

在本教程中,我们学习了如何增加数组的大小。我们可以创建一个更大的新数组,并将旧数组的内容复制到新数组中。最好和最简单的解决方案是使用 ArrayLists,因为它们可以动态增加其大小。

我们希望本指南非常有帮助,并且你在 Java 中学到了一些新东西。

相关文章 - Java Variable

相关文章 - Java Array