Java で配列サイズを増やす

Mohammad Irfan 2023年1月30日 2021年10月12日
  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 で別の新しい配列を作成して配列サイズを増やす

配列の固定サイズに対する簡単な解決策は、より大きなサイズの別の配列を作成することです。

カウンター変数を使用して、配列に挿入された要素の数を追跡できます。この数が配列の長さと等しくなると(配列がいっぱいであることを示す)、元の配列より 1 サイズ大きい新しい配列を作成できます。

次に、すべての要素を元の配列から新しい配列に転送しますが、新しい要素用に 1つの余分なスペースがあります。新しい要素を受け取り、そのための十分なスペースがない場合は、このプロセスを繰り返すことができます。

長さ 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)

次のコードは、上記のコードと似ています。唯一の違いは、increaseSize() メソッドの代わりに copyOf メソッドを使用していることです。

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 配列を使用して配列サイズを増やす

ArrayListjava.util パッケージにある動的配列であり、List インターフェースを実装します。通常の配列とは異なり、ArrayList の長さは可変です。

Java はこの動的配列のサイズを自動的に処理するため、配列のスペースが不足することを心配する必要はありません。デフォルトのサイズは 10 要素ですが、要素を追加するとサイズが大きくなります。

次の表は、配列と ArrayList の主な違いのいくつかを説明しています。

配列 配列リスト
配列はサイズ変更できず、作成後は常に固定長になります。 ArrayList は可変サイズの配列であり、追加のスペースが必要な場合、そのサイズは動的に増加します。
配列には、プリミティブデータ型とオブジェクトの両方を含めることができます。 ArrayList はオブジェクトのみを格納でき、プリミティブデータ型は格納できません。プリミティブデータ型は、リストに追加する前に、対応するオブジェクトに変換されます。 (int から整数、double から Double)
一定時間でインデックスを使用して要素を追加、削除、またはフェッチできるため、配列のパフォーマンスは ArrayList よりも優れています。 ArrayLists は、追加のスペースが必要な場合にサイズを変更する必要があるため、配列よりも少し遅くなります。
要素には、そのインデックスを使用してアクセスできます。 ArrayList の要素にアクセスして変更するための get()set()add() などの専用メソッドがあります。角括弧内のインデックスを直接使用して要素にアクセスすることはできません。

次のコードは、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]

長さ 5 の配列に 7 要素を追加しようとしたシナリオは、ArrayLists を使用して簡単に解決できます。ArrayListsint のようなプリミティブデータ型を使用できないため、ラッパークラス 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