Java | 1 日 90 分 × 7 日アプリ学習 初級編:List を使うアプリ

Web APP Java
スポンサーリンク

1日目のゴール

1日目のテーマは
「配列は“長さが固定”、ArrayList は“長さが変えられる”」という感覚をつかむこと です。

今日はまだ、メソッド名を全部暗記する日ではありません。
頭の中にまず、

「配列=箱の数が最初に決まっていて変えられない」
「ArrayList=あとから増やしたり減らしたりできる“伸び縮みする箱”」

このイメージをしっかり作るのがゴールです。


配列の“窮屈さ”をあえて感じてみる

配列は「長さを最初に決める必要がある」

まずは、ふつうの配列から思い出してみます。

public class Main {
    public static void main(String[] args) {
        int[] scores = new int[3];

        scores[0] = 80;
        scores[1] = 90;
        scores[2] = 75;

        System.out.println(scores[0]);
        System.out.println("人数: " + scores.length);
    }
}
Java

ここでやっていることはこうです。

  • new int[3] で「3個入る箱」を作る
  • そのあとで、0番・1番・2番に値を入れている

ここで重要なのは、
「3という数は、最初に決めたら変えられない」 ということです。

途中で「やっぱり4人分の点数を入れたい」と思っても、
この scores の長さを 4 に変えることはできません。

配列でよくハマるパターン

例えば、こんな状況を想像してください。

  • 最初は「3人分の点数を管理しよう」と思って配列を作った
  • あとから「やっぱり4人目も追加したい」となった

コードで書くとこうなります。

int[] scores = new int[3];
scores[0] = 80;
scores[1] = 90;
scores[2] = 75;

// ここで「4人目も入れたい」と思った
scores[3] = 88;  // 実行時エラー(配列の範囲外)
Java

コンパイルは通りますが、実行するとエラーになります。
「配列の長さは3なのに、4番目(インデックス3)にアクセスしようとした」からです。

ここで感じてほしいのは、
「配列は、あとから増やしたくなったときに不便」 ということです。


可変長データって何か?をイメージでつかむ

「何個になるか分からないもの」を扱いたい

現実のアプリでは、
最初から「何個になるか」決まっていないデータがたくさんあります。

  • 買い物カゴに入れる商品
  • チャットのメッセージ
  • タスク管理アプリのタスク
  • ゲームの敵の出現履歴

こういうものは、

  • 最初は0個かもしれない
  • 途中でどんどん増えるかもしれない
  • 場合によっては減るかもしれない

つまり、
「個数が変わる前提のデータ」=可変長データ です。

配列は「長さ固定」なので、
この可変長データを扱うにはちょっと窮屈です。

そこで登場するのが、
ArrayList です。


ArrayList は「伸び縮みする配列」だと思っていい

まずは一番シンプルなコードを見てみる

ArrayList を使うには、最初に import が必要です。

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("0番目: " + names.get(0));
        System.out.println("人数: " + names.size());
    }
}
Java

ここで出てきた新しいものを、ゆっくり分解します。

<String> の意味

ArrayList<String> names = new ArrayList<>();
Java

ArrayList<String>
「String を入れるための ArrayList」という意味です。

<String> の部分は、
「このリストに何を入れるか」 を表しています。

  • <String> → 文字列のリスト
  • <Integer> → 整数のリスト
  • <Book> → Book クラスのオブジェクトのリスト(後のステップ)

今日の時点では、
「ArrayList の <String> は“中身の型”を表している
と理解できていれば十分です。

add・get・size の役割

names.add("山田");
names.add("佐藤");
names.add("鈴木");
Java

add は「末尾に追加する」メソッドです。
配列のように「何番目に入れるか」を自分で考えなくてよく、
順番に後ろへ入っていきます。

System.out.println(names.get(0));
Java

get(0) は「0番目の要素を取り出す」メソッドです。
配列の names[0] に近いイメージです。

System.out.println("人数: " + names.size());
Java

size() は「今、何個入っているか」を返してくれます。
配列の length に近いですが、こちらはメソッドです。

ここで一番大事なのは、
「最初に“何人分”と決めていないのに、どんどん追加できている」
という感覚です。


配列と ArrayList を並べて比べる

同じことを2通りで書いてみる

「名前を3人分管理する」という同じ目的を、
配列と ArrayList で書き比べてみます。

配列版

public class Main {
    public static void main(String[] args) {
        String[] names = new String[3];

        names[0] = "山田";
        names[1] = "佐藤";
        names[2] = "鈴木";

        System.out.println("0番目: " + names[0]);
        System.out.println("人数: " + names.length);
    }
}
Java

ArrayList 版

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("0番目: " + names.get(0));
        System.out.println("人数: " + names.size());
    }
}
Java

ここで意識してほしいポイントは、次の2つです。

  • 配列は「最初に3と決めている」
  • ArrayList は「最初は空っぽで、あとから3人追加している」

そして、
「ArrayList のほうが、“何人になるか分からない”状況に強い」
ということです。


ArrayList の「増える・減る」を体で感じる

追加と削除を試してみる

ArrayList の強みは、「増える」だけでなく「減る」ことも簡単な点です。

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.size());

        names.remove(1);

        System.out.println("削除後の人数: " + names.size());
        System.out.println("0番目: " + names.get(0));
        System.out.println("1番目: " + names.get(1));
    }
}
Java

このコードで起きていることを、順番に追ってみます。

  • 最初は「山田」「佐藤」「鈴木」の3人が入る
  • names.remove(1); で「インデックス1(佐藤)」を削除する
  • 削除後は「山田」「鈴木」の2人になる
  • インデックスも詰められて、
    0番目が「山田」、1番目が「鈴木」になる

ここで感じてほしいのは、

「ArrayList は、真ん中の要素を消しても、ちゃんと詰めてくれる」
ということです。

配列で同じことをやろうとすると、
自分で要素をずらしたり、別の配列を作ったりする必要が出てきます。
ArrayList は、その面倒を全部やってくれる「賢い配列」だと思ってOKです。


1日目のミニアプリ:買い物リスト

仕様を言葉で決める

今日の仕上げとして、
とてもシンプルな「買い物リストアプリ」を作ってみます。

やりたいことはこうです。

  • 買いたいものを、順番にリストに追加する
  • 途中で「やっぱりこれはいらない」と削除できる
  • 最後に、買い物リストの中身と個数を表示する

コード全体

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> shoppingList = new ArrayList<>();

        shoppingList.add("牛乳");
        shoppingList.add("パン");
        shoppingList.add("卵");

        System.out.println("最初のリスト:");
        showList(shoppingList);

        System.out.println("パンはいらなくなったので削除します。");
        shoppingList.remove(1);

        System.out.println("削除後のリスト:");
        showList(shoppingList);
    }

    static void showList(ArrayList<String> list) {
        System.out.println("品目数: " + list.size());
        for (int i = 0; i < list.size(); i++) {
            System.out.println((i + 1) + " : " + list.get(i));
        }
    }
}
Java

このミニアプリで体感してほしいのは、次の3つです。

  • 最初は空っぽのリストから始められる
  • add でどんどん増やせる
  • remove で途中のものを消しても、ちゃんと詰めてくれる

つまり、
「買い物リストのような“増えたり減ったりするデータ”には ArrayList がぴったり」
という感覚です。


今日いちばん大事な“頭の中のイメージ”

1日目で絶対に持って帰ってほしいのは、このイメージです。

配列のイメージ

  • 「箱の数を最初に決める必要がある」
  • 「あとから増やしたくなると、ちょっとつらい」

ArrayList のイメージ

  • 「最初は空っぽでいい」
  • add でいくらでも増やせる」
  • remove で消したら、ちゃんと詰めてくれる」
  • size で“今何個あるか”が分かる」
  • <String> は“このリストの中身の型”を表している」

この2つのイメージが頭に入っていれば、
1日目としては大成功です。

2日目以降は、
ArrayList をクラスの中に持たせたり、
オブジェクトのリストを扱ったりして、
もっと“アプリっぽい”使い方に踏み込んでいきます。

タイトルとURLをコピーしました