複数のリテラルのコンテナとなるようなオブジェクトを「コレクション」と言います。
Kotlin では、List(リスト)、Set(セット)、Map(マップ)が用意されています。
「読み取り専用(イミュータブル)」と「書込み可(ミュータブル)」のインターフェイスが
明確に分かれているのも Kotlin の特徴です。
コレクションのインターフェイス
Kotlin のコレクション・パッケージには、3種類(List、Set、Map)のインターフェイスがあります。
また、それぞれのインターフェイスに「イミュータブル」と「ミュータブル」が用意されています。
それぞれの関係は、以下の図の通り。
List(リスト):listOf, mutableListOf
リストは、List で表現される順序付きのコレクションです。
Kotlin の標準ライブラリ関数 listOf を使用して、読み取り専用のリストを生成できます。
また、mutableListOf を使用して、書込み可のリストを生成できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
fun main() { // [1, 2, 3] val ints: List<Int> = listOf<Int>(1, 2, 3) println(ints.size) // [k, t] val chars: MutableList<Char> = mutableListOf('k', 't') // 要素の変更 chars[0] = 'l' // 要素の追加 chars += 'A' // [l, t, A] // 要素の削除 chars -= 'A' // [l, t] chars.removeAt(0) // [t] } |
配列と同様に、size プロパティやインデックスを指定して要素にアクセスします。
参考
配列については、「Array(配列)オブジェクト」にまとめています。
Set(セット):setOf, mutableSetOf
セットは、集合を表すコレクションです。
Kotlin の標準ライブラリ関数 setOf を使用して、読み取り専用のセットを生成できます。
また、mutableSetOf を使用して、書込み可のセットを生成できます。
|
1 2 3 4 5 |
// [1, 2, 3] val ints: Set<Int> = setOf<Int>(1, 2, 1, 3) // [s, a, n, c, h] val chars: MutableSet<Char> = mutableSetOf('s', 'a', 'n', 'a', 'c', 'h', 'a', 'n') |
要素の重複は許されず、例えば setOf(1, 1) で返されるオブジェクトは、要素数が 1 のみになります。
また、セットは要素の順序を保証しないため、リストのようにインデックスでアクセスはできません。
Map(マップ):mapOf, mutableMapOf
マップは、キーと値のペアを保持するコレクションです。
Kotlin の標準ライブラリ関数 mapOf を使用して、読み取り専用のマップを生成できます。
また、mutableMapOf を使用して、書込み可のマップを生成できます。
|
1 2 3 4 5 6 7 8 9 10 11 |
fun main() { val nums: MutableMap<String, Int> = mutableMapOf("one" to 1, "two" to 2) println(nums) println(nums.size) println(nums["two"]) println(nums["three"]) nums += "three" to 3 println(nums) } |
実行結果
{one=1, two=2}
2
2
null
{one=1, two=2, three=3}
キーと値には、それぞれ任意の型を指定することができます。
参考
データ型については、「リテラルと基本データ型」にまとめています。
コレクションまとめ
リスト、セット、マップをまとめます。
| インターフェイス | 特徴 | ミュータブル | 生成する標準関数 |
| List | 順序付きコレクション | ✖ | listOf |
| MutableList | 〇 | mutableListOf | |
| Set | 集合 | ✖ | setOf |
| MutableSet | 〇 | mutableSetOf | |
| Map | キーと値を保持 | ✖ | mapOf |
| MutableMap | 〇 | mutableMapOf |
