ArrayList を使う
3 つ作った箱に、4 つ目が入らない
配列は new String[3] と書いた時点で箱の数が決まります。あとから 4 つ目を足したくなったら、もっと大きい配列を作り直して中身を全部コピーするしかありません。ユーザーが何件入力するか分からない画面では、この作り直しが毎回ついて回ります。
java.util.ArrayList は、その手間を肩代わりしてくれる伸び縮みするリストです。内部では大きめの配列を持っていて、足りなくなったら勝手に確保し直して引っ越します。使う側は add と書くだけで済みます。
配列との違いは 2 つ覚えれば十分です。長さが固定か可変か、そして取り出し方が arr[0] か list.get(0) かです。
import と山かっこを書かないと動かない
Java
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
ArrayList<String> tasks = new ArrayList<>();
tasks.add("買い物");
tasks.add("洗濯");
System.out.println(tasks.size()); // 2
System.out.println(tasks.get(0)); // 買い物
}
}ArrayList は java.util パッケージにいるので、ファイルの先頭に import java.util.ArrayList; が要ります。忘れると cannot find symbol で止まります。
山かっこの <String> は「このリストには String しか入れない」という宣言です。整数を入れたいときは int ではなく Integer と書きます。右側の new ArrayList<>() は左側と同じ型になるので、山かっこの中は空のままで構いません。
Java
ArrayList<Integer> counts = new ArrayList<>();
counts.add(10); // 10 は自動で Integer に包まれるprintln に渡すと、中身がそのまま見える
リストごと println に渡すと、決まった形で中身が出てきます。
Java
System.out.println(tasks); // [買い物, 洗濯]これは toString() が呼ばれた結果です。角かっこで囲み、要素はカンマと半角スペースで区切る、という書式が決まっています。中身を目で確かめたいときに、要素を 1 つずつ取り出す必要はありません。
つまずきやすいのは次の 2 つです。list[0] と書くとコンパイルエラーになります。角かっこの記法は配列専用なので list.get(0) を使ってください。もう 1 つは unexpected type found: int というエラーで、これはほぼ ArrayList<int> と書いたときのものです。落ち着いて Integer に直しましょう。
課題では、受け取った引数を渡された順に add してから、リストを文字列にして返します。add した順がそのまま並び順になるので、順番を入れ替えると結果も変わります。同じ値を 2 回入れても弾かれず、そのぶん要素が増えます。
要件
- ファイル先頭で
import java.util.ArrayList;を書くこと ArrayList<Integer>をnew ArrayList<>()で生成すること (raw 型は禁止)- 引数
abcの順で末尾にaddし、最後にtoString()の結果をreturnすること
入出力例
buildList(10, 20, 30) → "[10, 20, 30]"
buildList(3, 1, 2) → "[3, 1, 2]"
buildList(5, 5, 5) → "[5, 5, 5]"