在 Java 中建立動態陣列
 
陣列是一種固定大小的資料結構,其大小一旦宣告就無法更改。動態陣列為我們提供了建立動態大小陣列的便利。我們可以相應地增加和減少這些大小,我們將在本文中討論如何製作 Java 動態陣列。
在 Java 中使用自定義邏輯建立動態陣列
在示例中,我們使用自定義邏輯,其中包括在陣列末尾或任何索引處新增元素的方法。當陣列已滿時,陣列大小增加兩倍。我們還在此過程中刪除和縮小陣列。
我們使用兩個類來測試動態陣列邏輯;第一個是 DynamicClass,第二個是 DynamicArrayTest 類。在 DynamicArrayTest 中,我們建立了一個 int 型別陣列 intArray 和兩個名為 size 和 capacity 的 int 變數。陣列大小是其中的專案數,陣列的容量是其中的總空間。
我們建立 DynamicArrayTest 類的建構函式,並使用大小為 2 的 int 陣列初始化 intArray。然後,我們將 size 初始化為 0,將 capacity 初始化為 2。最後,為了在陣列的最後位置新增一個元素,我們建立了 addElementToArray() 方法,該方法接受一個 int 元素作為引數。在這個函式中,我們首先檢查陣列的 size 和 capacity 是否相同。
如果為真,我們呼叫 increaseArraySize() 函式,因為陣列已滿。在 increaseArraySize() 方法中,我們建立了一個空的 int 陣列 tempArray 來臨時儲存陣列元素,並比較 size 和 capacity。我們用一個陣列初始化 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn