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をフォローしていただけると嬉しいです。