在 Java 中增加陣列大小

Mohammad Irfan 2023年1月30日 2021年10月2日
  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