在 Java 中建立動態陣列

Rupam Yadav 2023年10月12日
在 Java 中建立動態陣列

陣列是一種固定大小的資料結構,其大小一旦宣告就無法更改。動態陣列為我們提供了建立動態大小陣列的便利。我們可以相應地增加和減少這些大小,我們將在本文中討論如何製作 Java 動態陣列。

在 Java 中使用自定義邏輯建立動態陣列

在示例中,我們使用自定義邏輯,其中包括在陣列末尾或任何索引處新增元素的方法。當陣列已滿時,陣列大小增加兩倍。我們還在此過程中刪除和縮小陣列。

我們使用兩個類來測試動態陣列邏輯;第一個是 DynamicClass,第二個是 DynamicArrayTest 類。在 DynamicArrayTest 中,我們建立了一個 int 型別陣列 intArray 和兩個名為 sizecapacityint 變數。陣列大小是其中的專案數,陣列的容量是其中的總空間。

我們建立 DynamicArrayTest 類的建構函式,並使用大小為 2int 陣列初始化 intArray。然後,我們將 size 初始化為 0,將 capacity 初始化為 2。最後,為了在陣列的最後位置新增一個元素,我們建立了 addElementToArray() 方法,該方法接受一個 int 元素作為引數。在這個函式中,我們首先檢查陣列的 sizecapacity 是否相同。

如果為真,我們呼叫 increaseArraySize() 函式,因為陣列已滿。在 increaseArraySize() 方法中,我們建立了一個空的 int 陣列 tempArray 來臨時儲存陣列元素,並比較 sizecapacity。我們用一個陣列初始化 tempArray,並將其大小設定為陣列當前容量的兩倍。

increaseArraySize() 中,我們檢查 capacity 是否大於或等於 0。然後我們呼叫 System.arraycopy() 方法將一個陣列的元素複製到另一個陣列。在那裡,我們指定要複製的陣列、要複製的起始索引、要複製元素的陣列、目標位置以及我們想要的新陣列的大小。畢竟,我們用 tempArray 的元素重新初始化 intArray 並增加 capacity 的大小。

現在,我們建立一個方法來刪除元素並將其命名為 removeElement()。在這個函式中,我們檢查陣列的大小是否大於零。然後,我們用零替換陣列的最後一個元素,並將大小減一。請注意,此方法僅刪除陣列的最後一個元素。

當陣列已滿時,該陣列的容量會增加,並填充空白空間。這些空的、未使用的空間會增加記憶體使用和記憶體垃圾。為了解決這個問題,我們使用 shrinkSize() 函式刪除空索引。在這裡,我們建立一個臨時陣列並複製函式中 intArray 的所有元素,其大小與其元素相同,然後將陣列元素複製回 intArray

class DynamicArrayTest {
  int[] intArray;
  int size;
  int capacity;

  public DynamicArrayTest() {
    intArray = new int[2];
    size = 0;
    capacity = 2;
  }

  public void addElementToArray(int a) {
    if (size == capacity) {
      increaseArraySize();
    }
    intArray[size] = a;
    size++;
  }

  public void increaseArraySize() {
    int[] tempArray = null;
    if (size == capacity) {
      tempArray = new int[capacity * 2];
      {
        if (capacity >= 0) {
          System.arraycopy(intArray, 0, tempArray, 0, capacity);
        }
      }
    }
    intArray = tempArray;
    capacity = capacity * 2;
  }

  public void shrinkSize() {
    int[] temp;
    if (size > 0) {
      temp = new int[size];
      System.arraycopy(intArray, 0, temp, 0, size);
      capacity = size;
      intArray = temp;
    }
  }

  public void removeElement() {
    if (size > 0) {
      intArray[size - 1] = 0;
      size--;
    }
  }
}

public class DynamicArray {
  public static void main(String[] args) {
    DynamicArrayTest dynamicArrayTest = new DynamicArrayTest();

    dynamicArrayTest.addElementToArray(10);
    dynamicArrayTest.addElementToArray(20);
    dynamicArrayTest.addElementToArray(30);
    dynamicArrayTest.addElementToArray(40);
    dynamicArrayTest.addElementToArray(50);

    System.out.println("items of intArray:");

    for (int i = 0; i < dynamicArrayTest.capacity; i++) {
      System.out.print(dynamicArrayTest.intArray[i] + " ");
    }

    System.out.println();

    System.out.println("Capacity of the intArray: " + dynamicArrayTest.capacity);
    System.out.println("Size of the intArray: " + dynamicArrayTest.size);

    dynamicArrayTest.removeElement();

    System.out.println("\nItems after removing the last element");

    for (int i = 0; i < dynamicArrayTest.capacity; i++) {
      System.out.print(dynamicArrayTest.intArray[i] + " ");
    }

    System.out.println("\nCapacity of the intArray: " + dynamicArrayTest.capacity);
    System.out.println("Size of the intArray: " + dynamicArrayTest.size);

    dynamicArrayTest.shrinkSize();

    System.out.println("\nItems after removing unused space");

    for (int i = 0; i < dynamicArrayTest.capacity; i++) {
      System.out.print(dynamicArrayTest.intArray[i] + " ");
    }

    System.out.println("\nCapacity of the intArray: " + dynamicArrayTest.capacity);
    System.out.println("Size of the intArray: " + dynamicArrayTest.size);
  }
}

輸出:

items of intArray:
10 20 30 40 50 0 0 0 
Capacity of the intArray: 8
Size of the intArray: 5

Items after removing the last element
10 20 30 40 0 0 0 0 
Capacity of the intArray: 8
Size of the intArray: 4

Items after removing unused space
10 20 30 
Capacity of the intArray: 3
Size of the intArray: 3
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Array