kotlin には配列と似たような使い方ができる List が存在します。
List 自体は Java 経験者にはおなじみですが、kotlin では MutableList を使う機会も増えてきます。
いわゆるコレクション(Collection)の一種ですが、List は重要になってくるので要チェックです。
Listの定義
List の扱いは、以前紹介した Array と似たような部分があります。
しかし、配列の時には中に入れる型に応じて値の代入方法も変わっていました。

List では、値の代入に listOf() という関数を使用します。
1 2 3 4 5 | val numbers: List<Int> = listOf(1, 2, 3, 4, 5) for (n in numbers) { println("${n}です") } |
結果は配列の時と同じく、List の中身が順番に表示されます。
1です
2です
3です
4です
5です
ちなみに、List にはジェネリクスの機能を利用して <> の中に型が定義できるようになっています。
よって、ここを String に変えても Boolean にしても、値の代入には listOf() がそのまま使えます。
配列とListの大きな違い
上記のサンプルソースでは配列の時とほぼ違いはありませんが、大きく違うのは値の書き換えができないことです。
下記のようにソースを書き換えてビルドしようとするとエラーが発生します。
1 2 3 | val numbers: List<Int> = listOf(1, 2, 3, 4, 5) numbers[0] = 99 |
以下のように Int 型の配列の場合は、値を書き換えても問題ありません。
1 2 3 | val numbers: IntArray = intArrayOf(1, 2, 3, 4, 5) numbers[0] = 99 |
Listに要素を追加したい場合
List は値の書き換えができないことはお伝えしましたが、要素を追加することもできません。
これは意外なことでしたが、例えば空の List を用意してそこに 1 件ずつデータを詰め込むことができないわけです。
そんな用途のために、kotlin には ArrayList や MutableList が用意されています。
ここでは MutableList を使って説明していきます。
1 2 3 4 5 6 7 | val numbers: MutableList<Int> = mutableListOf(1, 2, 3, 4, 5) numbers.add(6) for (n in numbers) { println("${n}です") } |
上記の場合はビルドも通りますし、結果も以下のようになります。
1です
2です
3です
4です
5です
6です
add() を使うと MutableList の最後に要素を追加できますが、add(0, 6) のように引数を変えることで MutableList の好きな位置に値を挿入することができます。
詳しくは MutableList の公式リファレンスをご覧ください。
ただし混乱の元となるので、よほどの理由がない限り間に入れ込むことは避けた方がいいと思います。
Listの要素を削除したい場合
MutableList の特定の値を削除したい場面は出てくるかもしれません。
削除後は List の間が詰められるので、間に値を挿入することに比べると複雑さはありません。
1 2 3 4 5 6 7 8 9 | val numbers: MutableList<Int> = mutableListOf(1, 2, 3, 4, 5) numbers.add(6) numbers.removeAt(3) for (n in numbers) { println("${n}です") } |
結果は以下の通りです。
1です
2です
3です
5です
6です
ちなみに、removeAt() ではなく remove() を使うと特定の値を指定して削除できます。
1 2 3 4 5 6 7 8 9 | val numbers: MutableList<Int> = mutableListOf(1, 2, 3, 4, 5) numbers.add(6) numbers.remove(3) for (n in numbers) { println("${n}です") } |
これは List の 3 番目ではなく、3 の値が削除されます。
1です
2です
4です
5です
6です
まとめ
kotlin の List について紹介しました。
値の操作(追加、削除)をする場合は MutableList の方が使い勝手がいいですが、参照するだけであれば List の方が効果的な場面もあります。
ちなみに途中で紹介した ArrayList も kotlin には存在しますが、使用については MutableList に比べると推奨されていないようです。
また、List は順序を意識した使い方になりますが、順序を意識しない場合は Map などの別のコレクションを使うとパフォーマンスの向上が期待できます。