ArrayList: 可変長リスト

最も使うコレクション。配列と違いサイズ可変。

List
順序付きコレクション。
ジェネリクス
<T> で型を指定。
Stream
関数型スタイルの処理。
無限本棚 (Infinite Bookshelf)

ArrayListは「無限に広がる本棚」です。 配列 = 固定サイズの本棚(最初に5冊と決めたら6冊目は入らない) ArrayList = 自動で広がる本棚(いくらでも追加OK) ただし内部では配列を使っているので、中間への挿入は遅いです。

ArrayList

ArrayList Basics
import java.util.ArrayList;
import java.util.List;
// ArrayList の作成
List<String> names = new ArrayList<>();
// 要素の追加
names.add("Alice");
names.add("Bob");
names.add("Carol");
// 要素の取得
String first = names.get(0); // Alice
// サイズ
int size = names.size(); // 3
// 削除
names.remove("Bob");
names.remove(0); // インデックスで削除
// ループ
for (String name : names) {
System.out.println(name);
}
実行結果
Alice\nCarol
Bad
// ❌ Bad: 生の型(raw type)
ArrayList list = new ArrayList();
list.add("text");
list.add(123); // 型安全性がない
Good
// ✅ Good: ジェネリクス使用
List<String> list = new ArrayList<>();
list.add("text");
// list.add(123); // コンパイルエラー

パターン

Stream API
// Stream API
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
// フィルタ
List<Integer> evens = numbers.stream()
.filter(n -> n % 2 == 0)
.toList(); // [2, 4]
// マップ
List<Integer> doubled = numbers.stream()
.map(n -> n * 2)
.toList(); // [2, 4, 6, 8, 10]
// 集約
int sum = numbers.stream()
.reduce(0, Integer::sum); // 15
// 便利メソッド
List.of(1, 2, 3); // 不変リスト作成
List.copyOf(mutableList); // 不変コピー
Collections.sort(list); // ソート
Collections.reverse(list); // 逆順
Tip: List<T> として宣言。実装を隠す。

合格ライン

ジェネリクスを使える
Stream で filter/map できる

参考リンク

演習課題

課題1: ArrayList 操作
要素の追加・削除・検索を実装してください。
課題2: Stream 変換
Stream で filter と map を使ってデータを変換してください。

次のステップ