3日目のゴール
3日目のテーマは
「ArrayList に“ただの文字列”ではなく、“1件分の情報を持ったオブジェクト”を入れて扱えるようになること」 です。
1日目で「配列 vs ArrayList」、
2日目で「ArrayList をクラスの中に閉じ込める」まで来ました。
3日目では一歩進んで、
- 1件分の情報をクラスで表現する
- そのクラスのインスタンスを ArrayList に入れる
- 「可変長データ=オブジェクトの集まり」として扱う
この感覚を、小さな「タスク管理ミニアプリ」を題材にして固めていきます。
1件分の情報を“クラス”にする感覚
文字列だけでは足りなくなる瞬間
2日目までは、こんな感じで文字列のリストを扱っていました。
ArrayList<String> todos = new ArrayList<>();
todos.add("Java の勉強");
todos.add("洗濯");
todos.add("買い物");
Javaこれは「やることのタイトル」だけを管理しています。
でも、現実のタスクにはもっと情報があります。
例えばタスクなら、
- タイトル
- 期限(締め切り)
- 優先度
こういう情報をまとめて扱いたくなった瞬間、
「String だけでは足りないな」という感覚が出てきます。
そこで登場するのが、
「1件分をクラスで表現し、そのクラスのインスタンスを ArrayList に入れる」
というパターンです。
Task クラスで「1つのタスク」を表現する
Task クラスの定義
まずは「1つのタスク」を表すクラスを作ります。
public class Task {
String title;
String deadline;
int priority;
Task(String title, String deadline, int priority) {
if (title == null || title.isEmpty()) {
throw new IllegalArgumentException("タイトルは必須です。");
}
if (deadline == null || deadline.isEmpty()) {
throw new IllegalArgumentException("期限は必須です。");
}
if (priority < 1 || priority > 3) {
System.out.println("優先度が範囲外なので 3(低) にします。");
this.priority = 3;
} else {
this.priority = priority;
}
this.title = title;
this.deadline = deadline;
}
void show() {
System.out.println("タイトル: " + title + " / 期限: " + deadline + " / 優先度: " + priority);
}
}
Javaここでやっていることを、丁寧に言葉にしてみます。
タイトル・期限・優先度という「1件分の情報」を1つのまとまりとして持っている
コンストラクタで「必須情報」を受け取り、変な値をチェックしているshow メソッドで「1件分の自己紹介」ができるようにしている
この時点では、まだ ArrayList は出てきていません。
でも、「1つのタスクをちゃんと表現できる型」 ができました。
Task を ArrayList に詰めていく
ArrayList<Task> の基本形
次に、Task を入れる ArrayList を作ります。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Task> tasks = new ArrayList<>();
tasks.add(new Task("Java の勉強", "2026-05-30", 1));
tasks.add(new Task("買い物に行く", "2026-05-25", 2));
tasks.add(new Task("ランニング", "2026-05-24", 3));
System.out.println("タスク数: " + tasks.size());
Task first = tasks.get(0);
first.show();
}
}
Javaここでのポイントをかみ砕きます。
ArrayList<Task>
これは「Task 型のオブジェクトを入れるリスト」という意味です。
1日目の ArrayList<String> と同じで、<Task> は「このリストの中身の型」を表しています。
tasks.add(new Task(...))new Task(...) で「1件分のタスク」を作り、
それを add でリストに追加しています。
Task first = tasks.get(0);get(0) で「0番目のタスク」を取り出し、
それを変数 first に入れています。
ここで大事なのは、
「ArrayList の中身は、ただの文字列ではなく“Task オブジェクト”になっている」
ということです。
タスクのリストを“クラスの中に閉じ込める”
TaskList クラスのイメージ
2日目でやったように、
ArrayList をむき出しで main に置くのではなく、
「タスクのリストを管理するクラス」を作ってみます。
やりたいことを日本語で整理すると、
タスクを追加する
タスクを一覧表示する
期限や優先度で絞り込む(今日は簡単なものだけ)
これをクラスにします。
TaskList クラスの定義
import java.util.ArrayList;
public class TaskList {
ArrayList<Task> tasks;
TaskList() {
tasks = new ArrayList<>();
}
void add(Task task) {
if (task == null) {
System.out.println("null のタスクは追加できません。");
return;
}
tasks.add(task);
}
void showAll() {
System.out.println("=== タスク一覧 ===");
if (tasks.isEmpty()) {
System.out.println("タスクはまだありません。");
return;
}
for (int i = 0; i < tasks.size(); i++) {
System.out.print((i + 1) + "件目: ");
tasks.get(i).show();
}
}
void showHighPriority() {
System.out.println("=== 優先度1(高)のタスク ===");
boolean found = false;
for (Task t : tasks) {
if (t.priority == 1) {
t.show();
found = true;
}
}
if (!found) {
System.out.println("該当するタスクはありません。");
}
}
}
Javaここで新しく出てきたポイントを深掘りします。
ArrayList<Task> をフィールドに持つ
ArrayList<Task> tasks;
JavaTaskList は、「タスクのリスト」を自分の中に持っています。
中身は Task オブジェクトです。
コンストラクタで「空のリスト」を用意する
TaskList() {
tasks = new ArrayList<>();
}
JavaTaskList を new した瞬間に、
「タスクはまだないけれど、登録する準備はできている」状態になります。
メソッドで“意味のある操作”を提供する
add(Task task)
「タスクを1件追加する」という操作
null を防いでから tasks.add(task) している
showAll()
「全タスクを表示する」という操作
0件なら「まだありません」と表示する
showHighPriority()
「優先度1のタスクだけを表示する」という操作
ここで初めて、“条件で絞り込む”という要素が入ってきます
ここで感じてほしいのは、
「ArrayList を直接触るのではなく、“タスクリストとしての操作”をメソッドで表現している」
ということです。
Main から見たときの“アプリっぽさ”
TaskList を使う側のコード
さっきの Task と TaskList を、Main から使ってみます。
public class Main {
public static void main(String[] args) {
TaskList list = new TaskList();
list.add(new Task("Java の勉強", "2026-05-30", 1));
list.add(new Task("買い物に行く", "2026-05-25", 2));
list.add(new Task("ランニング", "2026-05-24", 3));
list.showAll();
System.out.println("-----");
list.showHighPriority();
}
}
Javaこのコードを眺めてみてください。
new TaskList() で「タスクリスト」が1つできるadd(new Task(...)) で「タスクを登録する」showAll() で「全部のタスクを見る」showHighPriority() で「優先度の高いタスクだけを見る」
Main からは、
「ArrayList」という言葉は一切見えません。
見えているのは、
タスク
タスクリスト
登録する
一覧表示する
条件付きで表示する
という“アプリとしての操作”だけです。
これが、3日目で一番大事な感覚です。
拡張 for 文で「中身をなめる」書き方
for (Task t : tasks) の意味
さっきの showHighPriority では、こんな書き方をしました。
for (Task t : tasks) {
if (t.priority == 1) {
t.show();
}
}
Javaこれは「拡張 for 文(for-each)」と呼ばれる書き方で、
「tasks の中身を、先頭から順番に t に取り出していく」
という意味です。
普通の for 文で書くとこうなります。
for (int i = 0; i < tasks.size(); i++) {
Task t = tasks.get(i);
if (t.priority == 1) {
t.show();
}
}
Javaどちらでも同じ動きですが、
「リストの中身を順番に全部見る」 という目的なら、
拡張 for 文のほうが読みやすいことが多いです。
今日の段階では、
「ArrayList の中身を全部見るときは、for (Task t : tasks) みたいに書ける」
と知っておけば十分です。
3日目のミニアプリ完成形
Task クラス
public class Task {
String title;
String deadline;
int priority;
Task(String title, String deadline, int priority) {
if (title == null || title.isEmpty()) {
throw new IllegalArgumentException("タイトルは必須です。");
}
if (deadline == null || deadline.isEmpty()) {
throw new IllegalArgumentException("期限は必須です。");
}
if (priority < 1 || priority > 3) {
System.out.println("優先度が範囲外なので 3(低) にします。");
this.priority = 3;
} else {
this.priority = priority;
}
this.title = title;
this.deadline = deadline;
}
void show() {
System.out.println("タイトル: " + title + " / 期限: " + deadline + " / 優先度: " + priority);
}
}
JavaTaskList クラス
import java.util.ArrayList;
public class TaskList {
ArrayList<Task> tasks;
TaskList() {
tasks = new ArrayList<>();
}
void add(Task task) {
if (task == null) {
System.out.println("null のタスクは追加できません。");
return;
}
tasks.add(task);
}
void showAll() {
System.out.println("=== タスク一覧 ===");
if (tasks.isEmpty()) {
System.out.println("タスクはまだありません。");
return;
}
for (int i = 0; i < tasks.size(); i++) {
System.out.print((i + 1) + "件目: ");
tasks.get(i).show();
}
}
void showHighPriority() {
System.out.println("=== 優先度1(高)のタスク ===");
boolean found = false;
for (Task t : tasks) {
if (t.priority == 1) {
t.show();
found = true;
}
}
if (!found) {
System.out.println("該当するタスクはありません。");
}
}
}
JavaMain クラス
public class Main {
public static void main(String[] args) {
TaskList list = new TaskList();
list.add(new Task("Java の勉強", "2026-05-30", 1));
list.add(new Task("買い物に行く", "2026-05-25", 2));
list.add(new Task("ランニング", "2026-05-24", 3));
list.showAll();
System.out.println("-----");
list.showHighPriority();
}
}
Javaこの全体を見て、
「ArrayList はどこにあって、何を入れているか?」
「Main は何を知っていて、何を知らなくていいか?」
を自分の言葉で説明できたら、3日目はかなりいい仕上がりです。
3日目で絶対に押さえてほしい本質
今日いちばん大事なのは、
「ArrayList は“オブジェクトの集まり”を扱うための道具だ」と腹で理解できたかどうか です。
1件分の情報(タスク・生徒・本・商品…)をクラスで表現する
そのクラスのインスタンスを ArrayList に詰めていく
ArrayList 自体はクラスの中に隠し、
外からは「意味のある操作(追加・表示・条件付き表示)」だけをメソッドとして公開する
この感覚が入っていれば、
4日目以降にやる「検索」「更新」「削除」「ソート」なども、
自然に理解できるようになっていきます。

