Java で動的配列を作成する

Rupam Yadav 2023年10月12日
Java で動的配列を作成する

配列は固定サイズのデータ​​構造であり、宣言するとサイズを変更できません。動的配列は、動的サイズの配列を作成する機能を提供します。に応じてこれらのサイズを増減できます。この記事では、Java 動的配列を作成する方法について説明します。

Java でカスタムロジックを使用して動的配列を作成する

この例では、配列の最後または任意のインデックスに要素を追加するメソッドを含むカスタムロジックを使用しています。配列がいっぱいになると、配列のサイズが 2 倍になります。また、その過程でアレイを削除して縮小します。

2つのクラスを使用して、動的配列ロジックをテストします。1つ目は DynamicClass で、2つ目は DynamicArrayTest クラスです。DynamicArrayTest では、int 型配列 intArray と、size および capacity という名前の 2つの int 変数を作成します。配列サイズはその中のアイテムの数であり、配列の容量はその中の合計スペースです。

DynamicArrayTest クラスのコンストラクターを作成し、intArray2 のサイズの int 配列で初期化します。次に、size0 で初期化し、capacity2 として初期化します。最後に、配列の最後の位置に要素を追加するために、パラメーターとして int 要素を受け入れる addElementToArray() メソッドを作成します。この関数では、最初に配列の sizecapacity が同じであるかどうかを確認します。

true の場合、配列がいっぱいであるため、increaseArraySize() 関数を呼び出します。increaseArraySize() メソッドでは、空の int 配列 tempArray を作成して配列要素を一時的に保存し、sizecapacity を比較します。tempArray を配列で初期化し、そのサイズを配列の現在の容量の 2 倍に設定します。

increaseArraySize() では、capacity0 以上であるかどうかを確認します。次に、ある配列の要素を別の配列にコピーする System.arraycopy() メソッドを呼び出します。そこで、コピーする配列、コピーする開始インデックス、要素をコピーする配列、宛先の位置、および必要な新しい配列のサイズを指定します。その後、tempArray の要素を使用して intArray を再初期化し、capacity のサイズを増やします。

次に、要素を削除して removeElement() という名前を付けるメソッドを作成します。この関数では、配列の size がゼロより大きいかどうかを確認します。次に、配列の最後の要素をゼロに置き換え、サイズを 1つ減らします。このメソッドは、配列の最後の要素のみを削除することに注意してください。

配列がいっぱいになると、その配列の容量が増え、空のスペースが埋められます。これらの空の未使用スペースは、メモリ使用量とメモリガベージを増やす可能性があります。これを修正するには、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