初心者向けに 配列(Array)と ArrayList の違い を図解で整理します。ASCII 図でイメージしやすくしてみます。
1. 基本イメージ
普通の配列(Array) ArrayList
------------------- ------------------------
固定サイズ 可変サイズ
int[] nums = new int[3]; ArrayList<Integer> list = new ArrayList<>();
配列のイメージ
配列 nums (int[3]):
+----+----+----+
| 10 | 20 | 30 |
+----+----+----+
index: 0 1 2
- サイズは 3 に固定
- 新しい要素を追加したい場合は、新しい配列を作り直す必要がある
ArrayList のイメージ
ArrayList list:
+----+----+----+----+
| 10 | 20 | 30 | 40 | <- add() で自由に追加できる
+----+----+----+----+
index: 0 1 2 3
- サイズは 可変
.add()で自由に追加.remove(index)で要素を削除すると自動で詰めてくれる
2. メモリの違いイメージ
Array (固定長) ArrayList (可変長)
------------------ -----------------------
[ 10 ][ 20 ][ 30 ] [ 10 ][ 20 ][ 30 ][ 40 ]
(内部的には Object[] で管理)
- ArrayList は内部で 配列を使っているが、容量が足りなくなると自動で拡張 される
- だから使いやすいけど、内部でコピーが発生する場合がある
3. 主な違いまとめ表
| 特徴 | 配列 (Array) | ArrayList |
|---|---|---|
| サイズ | 固定 | 可変 |
| 要素の型 | プリミティブ型も可 (int, double, etc.) | オブジェクト型のみ (Integer, Double, etc.) |
| 追加・削除 | 不可(新しい配列作成が必要) | add(), remove() で自由に可能 |
| メモリ効率 | 高い | 少し低い(内部拡張でコピーあり) |
| 使用例 | 数学計算、固定データ | リスト管理、動的データ |
💡 ポイント
- 配列は「決まったサイズで高速に処理したい時」
- ArrayList は「要素数が変わるリストを扱うとき」に便利

- 左側:配列 (Array)
- サイズ固定
- 要素追加不可
- コピーが必要 (
System.arraycopy)
- 右側:ArrayList
- サイズ可変
- 要素追加・削除が簡単 (
add,remove) - 連結も
addAllで一発
この図を見れば「配列は箱の大きさが決まっている」「ArrayListは伸び縮みできる箱」というイメージがつかみやすいと思います。
