1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

動的配列とは?

Posted at

1. 動的配列とは?

動的配列は、要素の追加や削除に伴って、自動的にメモリ領域が拡張される配列です。

固定配列(静的配列):サイズを宣言時に指定し、変更できません。
例:int[] arr = new int[5]; → サイズ5の配列を固定。

動的配列:サイズの上限がなく、実行中に要素の数を増減できます。

動的配列の特徴
サイズの自動拡張:容量を超えた要素を追加すると、自動で容量が2倍になる。
要素の削除も可能:必要に応じて要素を削除し、サイズを縮小できる。
配列の欠点を克服:配列のサイズを事前に考えなくても良い。
2. Javaでの動的配列の実装(ArrayList)
Javaでは、ArrayListが代表的な動的配列のクラスです。ArrayListは、要素の追加や削除が簡単にでき、配列サイズの管理を自動で行います。

2.1 ArrayListの基本的な使い方

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // 動的配列 ArrayList の作成
        ArrayList<Integer> list = new ArrayList<>();

        // 要素の追加
        list.add(10);
        list.add(20);
        list.add(30);

        // 要素の出力
        System.out.println("配列の内容: " + list);

        // 要素の取得
        System.out.println("2番目の要素: " + list.get(1)); // 出力: 20

        // 要素の削除
        list.remove(1); // インデックス1の要素を削除

        // 削除後の配列の内容
        System.out.println("削除後の内容: " + list);
    }
}

出力結果:

配列の内容: [10, 20, 30]
2番目の要素: 20
削除後の内容: [10, 30]

3. 動的配列の内部動作

ArrayListの内部では、通常の配列が使われていますが、次のような動作が行われています。

3.1 容量の自動拡張
新しい要素を追加し、現在の容量を超えると、容量が自動的に拡張されます。
多くの場合、容量は2倍になります。
例:10要素の容量が満杯のとき、20要素の新しい配列が確保されます。

3.2 データの再配置
新しい配列が確保されると、元の配列の要素がすべて新しい配列にコピーされます。

4. 動的配列の応用例

4.1 文字列の動的配列

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");

        // 全要素の出力
        for (String name : names) {
            System.out.println(name);
        }
    }
}

出力結果:

Alice
Bob
Charlie

4.2 二次元の動的配列
Javaで二次元の動的配列を使うには、ArrayListを入れ子にします。

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<ArrayList<Integer>> matrix = new ArrayList<>();

        // 2次元配列の初期化
        for (int i = 0; i < 3; i++) {
            matrix.add(new ArrayList<>());
            for (int j = 0; j < 3; j++) {
                matrix.get(i).add(i + j);  // 例として i + j を追加
            }
        }

        // 配列の内容を出力
        for (ArrayList<Integer> row : matrix) {
            System.out.println(row);
        }
    }
}

出力結果:

[0, 1, 2]
[1, 2, 3]
[2, 3, 4]

5. 動的配列のメリットとデメリット

5.1 メリット
サイズ管理不要:プログラマーがサイズを気にする必要がない。
要素の追加・削除が容易:配列の長さが変わっても自動的に調整される。
便利なメソッドが豊富:ArrayListには要素の検索、ソート、クリアなどのメソッドが用意されている。
5.2 デメリット
パフォーマンスの低下:容量を超えるたびに新しい配列を確保するため、処理に時間がかかる場合がある。
メモリ消費が多い:内部で使用する配列は、多めにメモリを確保するため、メモリ消費が増える。

6. 動的配列を使うべき場面

要素数が事前に決まっていない場合のデータ管理(例:ユーザーの入力を受け付ける場合)。
頻繁な要素の追加・削除が必要な場合。
データのサイズが可変で、処理効率よりも柔軟性が求められる場合。
7. まとめ
動的配列は、プログラムの実行中に要素数が変化する場合に非常に便利なデータ構造です。Javaでは、ArrayListが動的配列をサポートし、簡単な操作で要素の追加・削除が可能です。

競技プログラミングや日常的な開発では、配列のサイズを予測できない場合がよくあります。そのような場面で、動的配列を活用することで、柔軟で効率的なプログラムを作成することができます。

毎日更新していますので、@y-t0910をフォローしていただけると嬉しいです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?