KotlinでListの使い方がよくわからない
Listの扱い方がよくわからない
Listの種類がよくわからない
Kotlinの学習を始めたての方はListの種類や使い方、持ってる関数などよくわからないところもありますよね。
こんにちは!エンジニアのかいです。Kotlinをこれから始めようとしている人、もしくは始めたての人であればKotlinのListについていまいち理解できていない人もいると思います。
そこで本日はKotlin初心者の方を対象にListの使い方や種類など詳しく解説していきますのでこれからListを学びたいという方はぜひ参考にしていってください。
この記事はこんな人のために書きました。
- KotlinでListを使いこなしたい
- Listの種類を理解して、場合に応じたものを使えるようになりたい
- Listのもつメソッドなども使って見たい
KotlinのListとは
Kotlinには標準のライブラリとして様々なものが用意されていますが、その中の一つにコレクションというものがあります。コレクションの中にはListやMapなどを司る様々なインターフェースが用意されています。
そのインターフェースが実装されたlistOf()やmapOf()などを使うことで、ListやMapを生成することができます。
KotlinのListには(Listにはというよりコレクションには)、書き込み可能なものと読み込み専用なものがあります。それぞれの使い方を謝るとバグの原因になりますね。
これらについては、後述するのでしっかりと理解しておきたいところです。
Listを使うメリット
さて、ここで一度立ち返ってListを使うメリットについて考えましょう。Listとは、配列などとも言われるインデックスで値を管理する箱みたいなものですね。
つまり、たくさんのデータを一つの箱に入れて扱うことができるのです。配列は、プログラミングをする上で必須前提となる知識なのできちんと理解しておきましょう。
Listを使ってみよう
さて、それでは実際にListを使って見ましょう。
上記にもあげた通りKotlinにはListインターフェースが実装されたメソッドがいくつかあります。
fun main(args: Array<String>) { val list = listOf(1,2,3) println(list) }
[1, 2, 3]
このように書くことで配列を作成することができます。
fun main(args: Array<String>) { val list = listOf(1,2,3) println(list[1]) }
2
また、このようにインデックスを指定することで中身の値を指定することができますね。配列はfor文とセットで扱われることが多く、以下のようなコードはよく見かけます。
fun main(args: Array<String>) { val list = listOf(1,2,3) for(i in list){ println(i) } }
1 2 3
sortしてみよう
さて、それではListの持つメソッドであるsortedを使ってみましょう。
fun main(args: Array<String>) { val list = listOf(3,2,1).sorted() println(list) }
[1, 2, 3]
このとおり、昇順になりましたね。
mutableなlist
冒頭で話した通りListには変更可能なものと、読み取り専用のものがあります。それぞれの挙動について理解しましょう。
fun main(args: Array<String>) { val mutableList = mutableListOf(1, 2, 3) mutableList.add(4) println(mutableList) }
[1, 2, 3, 4]
変更可能なのが確認できますね。
読み取り専用なlist
fun main(args: Array<String>) { val ro = listOf(1, 2, 3) ro.add(4) println(ro) }
Error:(3, 8) Kotlin: Unresolved reference: add
このように、listOfで読み取り専用なListをつくるとコンパイルエラーになりますね。
配列の種類
Kotlinには3つの配列があり、今回紹介したListもその1つです。この章では、その3種類について違いを説明していきます。
3つの配列とは、List, Array, ArrayListのことでそれぞれの以下の特徴があります。
配列 | 特徴 |
---|---|
List | 要素の変更:不可 要素数の変更:不可 |
Array | 要素の変更:可 要素数の変更:不可 |
ArrayList | 要素の変更:可 要素数の変更:可 |
List
Listは先ほど説明した通り、要素の変更も、要素数の変更も許されていません。読み取り専用なので当たり前といえば当たり前ですね。
Array
Arrayは、要素の変更は許されているが、要素数の変更は許されていない配列です。例をみてみましょう。
fun main(args: Array<String>) { val arr = arrayOf(1,2,3) arr[0] = 4 for(i in arr){ println(i) } }
4 2 3
値の変更が確認できますね。
fun main(args: Array<String>) { val arr = arrayOf(1,2,3) arr.add(9) for(i in arr){ println(i) } }
Error:(3, 9) Kotlin: Unresolved reference: add
しかしこのように要素の追加は許されていません。
ArrayList
さて、最後のArrayListは変更も追加も許されている配列です。
fun main(args: Array<String>) { val arrList = arrayListOf(1,2,3) arrList[0] = 4 arrList.add(9) for(i in arrList){ println(i) } }
4 2 3 9
変更と追加が確認できますね。
まとめ
本日は、KotlinのListやその他の配列について詳しく説明していきました。
用途にあったものを使えるようになると、メモリ効率もいいですしバグを未然に防げるのでぜひマスターしておきましょう!