「Listって結局なんなの?」

Javaを書き始めたころ、 List というものが よく出てきました。

ただ、

Listってデータそのものなのか?
オブジェクトとは何が違うのか?
Listの中には何が入っているのか?

こういったところが 最初はかなり分かりにくかったです。

まずは普通の変数

まずは一番単純な例です。

String name = "田中";

name という変数に 「田中」という文字列を入れています。

ポイント

変数は、値を扱うための 名前付きの入れ物として考えると 分かりやすいです。

オブジェクトを扱う

次に、人物を表す Person クラスを考えます。

Person person = new Person();

ここでは Person という クラスからオブジェクトを作っています。

例えば、

person.setName("田中");
person.setAge(30);

とすれば、 1人分の情報を持ったオブジェクトとして 扱うことができます。

では、Listとは何なのか

ここでListが出てきます。

List<Person> persons =
    new ArrayList<>();

これは、

Person 1人分
List<Person> Personを複数持つ

と考えるとかなり分かりやすくなります。

つまり、

Person person;

は1つのPersonを扱う。

List<Person> persons;

は複数のPersonを扱う。

Listにデータを追加する

Listを作っただけでは 中身は空です。

List<Person> persons =
    new ArrayList<>();

Person person1 = new Person();
person1.setName("田中");

Person person2 = new Person();
person2.setName("佐藤");

persons.add(person1);
persons.add(person2);

これでListの中に 2つのPersonオブジェクトが入ります。

イメージ

List
├─ Person(田中)
└─ Person(佐藤)

Listをループする

業務システムでは、 Listの中身を順番に処理することが 非常によくあります。

for (Person person : persons) {

    System.out.println(
        person.getName()
    );

}

この場合、

person

はListそのものではありません。

Listの中から 1件ずつ取り出された Person オブジェクトです。

業務コードで急に難しくなる理由

Javaの勉強では、

List<Person>

程度で終わることが多いですが、 実際の業務コードでは もっと複雑な構造が出てきます。

List<Map<String, Object>>

例えばこのようなコードを見ると、 一気に分かりにくくなります。

ここで重要

分からないのは Javaの文法そのものではなく、 「何を何個持っているのか」が 見えなくなっている場合があります。

Listは「入れ物」と考えると分かりやすい

Javaを勉強していると、 Listそのものを難しく考えてしまいがちでした。

でも、

Listは複数のデータを 扱うための入れ物。

そして、その中に StringやInteger、 独自クラスのオブジェクトなどを 入れることができます。

ここが分かると、 List<Person> のような 型も少し読みやすくなります。