Java入門⑫ ArrayList ── あとから増やせる、便利なまとまり
Java入門⑫ ArrayList ── あとから増やせる、便利なまとまり
前回は「配列(たくさんのデータをまとめて持つ箱)」をやりました。
今回は、配列によく似ているけれど、もっと柔軟なArrayList(アレイリスト)です。実際の開発では、配列よりこちらをよく使います。
ArrayList とは、あとから増やしたり減らしたりできる、まとまりです。
配列の、ちょっと不便なところ
前回の配列には、不便な点がありました。最初に決めた個数を、後から変えられないのです。
int[] scores = {80, 95, 70}; // 3個で確定
この後で「4人目を追加したい」と思っても、配列のままでは簡単にはできません。弁当箱の仕切りの数が、最初から固定されているようなものです。
でも実際には、「データが何個になるか、最初は分からない」ことがほとんどです。そこで使うのが ArrayList。あとから自由に、増やしたり減らしたりできます。
書き方を見てみる
ArrayList を作って、データを追加してみます。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> scores = new ArrayList<Integer>();
scores.add(80);
scores.add(95);
scores.add(70);
}
}
記号が増えましたが、ひとつずつ見れば大丈夫です。
import java.util.ArrayList;… ArrayList を使う宣言(先頭に書く)ArrayList<Integer>… 「整数を入れる ArrayList」という意味new ArrayList<Integer>()… 空っぽの ArrayList を用意scores.add(80)… ArrayList に 80 を追加する
add(追加する)で、後から1個ずつ入れていけます。最初に個数を決めなくていいのが、配列との大きな違いです。
Integer って何? ── int との違い
ここで「あれ?」と思ったかもしれません。int ではなく Integer と書いています。
ArrayList の < > の中には、int のような基本の型を、そのまま書けません。代わりに、Integer(インテジャー)という、int を包んだ箱のような型を使います。
int… 基本の整数型Integer… int を、まとまりの中で扱えるようにした型
ややこしいですが、今は「ArrayList に整数を入れるときは Integer と書く」と覚えればOKです。文字列なら ArrayList<String>、小数なら ArrayList<Double> です。
(C#では List<int> のように基本型をそのまま書けましたが、Javaは Integer と書く必要がある。これはJava特有のクセです。)
取り出し方
中身を取り出すときは、配列とは少し違い、get を使います。
System.out.println(scores.get(0)); // 80
System.out.println(scores.get(1)); // 95
- 配列 …
scores[0](角カッコ) - ArrayList …
scores.get(0)(get を使う)
番号が0から始まるのは、配列と同じです。
くり返しと組み合わせるのも、できます。
for (int i = 0; i < scores.size(); i++) {
System.out.println(scores.get(i));
}
個数を調べるのは、配列の .length と違い、ArrayList は .size() です。
ArrayList にできる、便利なこと
ArrayList は、追加だけでなく、いろいろできます。
scores.add(60); // 末尾に追加
scores.remove(0); // 0番目を削除
scores.size(); // 個数を調べる
scores.contains(80); // 80 が含まれているか(true / false)
「追加する」「削除する」「含まれているか調べる」。配列ではひと手間かかることが、ArrayList なら一言で書けます。この手軽さが、ArrayList がよく使われる理由です。
配列と ArrayList、どう使い分けるか
- 配列 … 個数が最初から決まっている。サイズが変わらないとき
- ArrayList … 個数が決まっていない。あとから増減するとき
迷ったら、「後から個数が変わるか?」を考えてみてください。変わるなら ArrayList。実際の開発では変わることが多いので、ArrayList を使う場面の方が多いです。
つまずきポイント
学生がはまるのが、int と Integer の使い分けです。
ArrayList<int> scores; // エラー!基本型は使えない
ArrayList<Integer> scores; // 正しい
「ArrayList の中には、Integer(大文字)」。エラーが出たら、ここを疑ってみてください。普段の変数は int、ArrayList の中身は Integer、と区別しておきましょう。
まとめ
ArrayList は、あとから増減できる、柔軟なまとまり。
ArrayList<Integer> scores = new ArrayList<Integer>();
scores.add(80); // 追加
System.out.println(scores.get(0)); // 取り出しは get(0から)
addで追加、removeで削除、.size()で個数- 中身が整数なら
Integer、文字列ならString - 個数が固定なら配列、変わるなら ArrayList
次回は、配列や ArrayList の中身を、もっとラクに全部取り出せる 拡張for文 を紹介します。

