前回の配列は、最初に決めた要素数を後から変えられませんでした。「ユーザーが入力した名前を順番に追加していく」ような場面では、要素数が決まっていないほうが都合がよいです。ArrayList を使うと、必要に応じて要素を増やせます。
実行環境は引き続きブラウザ上のもの(paiza.IO や OneCompiler)です。
配列は要素を追加できない
前回の配列を使って名前リストを作ると、最初に要素数を決める必要があります。
public class Main {
public static void main(String[] args) {
String[] names = {"田中", "佐藤", "鈴木"};
System.out.println(names.length);
}
}
3
ここに4人目を追加したくても、配列の要素数は 3 のまま変えられません。
ArrayList で書き直す
ArrayList を使うと、あとから add で要素を追加できます。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("田中");
names.add("佐藤");
names.add("鈴木");
System.out.println(names);
}
}
[田中, 佐藤, 鈴木]
いくつか見慣れない書き方が出てきました。
| 書き方 | 意味 |
|---|---|
import java.util.ArrayList; | ArrayList を使う準備(1行目に書く) |
ArrayList<String> | 「String を入れる ArrayList」という型 |
new ArrayList<>() | 空の ArrayList を作る |
names.add(...) | 末尾に要素を追加する |
<String> の部分は「中に入れる型を指定する書き方」です。<Integer> にすれば int の値を入れる ArrayList になります。詳しい仕組みは後の回で扱います。
要素の取得とサイズ
配列の [インデックス] や .length に対応するのが、.get(インデックス) と .size() です。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("田中");
names.add("佐藤");
names.add("鈴木");
System.out.println("先頭: " + names.get(0));
System.out.println("2番目: " + names.get(1));
System.out.println("人数: " + names.size());
}
}
先頭: 田中
2番目: 佐藤
人数: 3
| 操作 | 配列 | ArrayList |
|---|---|---|
| 要素を取り出す | names[0]、names[1]… | names.get(0)、names.get(1)… |
| 要素数を得る | names.length | names.size() |
インデックスが 0 始まりなのは配列と同じです。
for で全要素を処理する
配列と同じように、インデックスの for 文で回せます。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("田中");
names.add("佐藤");
names.add("鈴木");
for (int i = 0; i < names.size(); i++) {
System.out.println((i + 1) + "番: " + names.get(i));
}
}
}
1番: 田中
2番: 佐藤
3番: 鈴木
もう1つ、拡張 for 文(for-each)という書き方もあります。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("田中");
names.add("佐藤");
names.add("鈴木");
for (String name : names) {
System.out.println(name + "さん");
}
}
}
田中さん
佐藤さん
鈴木さん
for (String name : names) は「names の中身を1つずつ name に入れてくり返す」と読みます。インデックスが不要な場面ではこちらのほうが短く書けます。
配列と ArrayList の使い分け
| 配列 | ArrayList | |
|---|---|---|
| 要素数 | 最初に固定 | あとから変えられる |
| 書き方 | int[] | ArrayList<Integer> |
| 要素の取得 | scores[i] | names.get(i) |
| 要素数の取得 | .length | .size() |
| 主な場面 | 要素数が決まっている | 要素数が変わる |
実際の開発では ArrayList(やその仲間の List)を使うことのほうが多いです。配列は「中身の仕組みを理解するための土台」として押さえておけば十分です。
次の回へ
ここまでが「ブラウザ上で Java の基礎を読む」フェーズです。変数、計算、if、for、メソッド、配列、ArrayList と、小さなプログラムに必要な道具がそろいました。次の Part では、VS Code を使ったローカル環境に移り、ファイルを分けてコードを書く方法に進みます。