Java で動的配列を作成する
配列は固定サイズのデータ構造であり、宣言するとサイズを変更できません。動的配列は、動的サイズの配列を作成する機能を提供します。に応じてこれらのサイズを増減できます。この記事では、Java 動的配列を作成する方法について説明します。
Java でカスタムロジックを使用して動的配列を作成する
この例では、配列の最後または任意のインデックスに要素を追加するメソッドを含むカスタムロジックを使用しています。配列がいっぱいになると、配列のサイズが 2 倍になります。また、その過程でアレイを削除して縮小します。
2つのクラスを使用して、動的配列ロジックをテストします。1つ目は DynamicClass
で、2つ目は DynamicArrayTest
クラスです。DynamicArrayTest
では、int
型配列 intArray
と、size
および capacity
という名前の 2つの int
変数を作成します。配列サイズはその中のアイテムの数であり、配列の容量はその中の合計スペースです。
DynamicArrayTest
クラスのコンストラクターを作成し、intArray
を 2
のサイズの int
配列で初期化します。次に、size
を 0
で初期化し、capacity
を 2
として初期化します。最後に、配列の最後の位置に要素を追加するために、パラメーターとして int
要素を受け入れる addElementToArray()
メソッドを作成します。この関数では、最初に配列の size
と capacity
が同じであるかどうかを確認します。
true の場合、配列がいっぱいであるため、increaseArraySize()
関数を呼び出します。increaseArraySize()
メソッドでは、空の int
配列 tempArray
を作成して配列要素を一時的に保存し、size
と capacity
を比較します。tempArray
を配列で初期化し、そのサイズを配列の現在の容量の 2 倍に設定します。
increaseArraySize()
では、capacity
が 0
以上であるかどうかを確認します。次に、ある配列の要素を別の配列にコピーする 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn