0Pricing
Kotlin Academy · レッスン

listOf、setOf、mapOf:読み取り専用コレクション

イミュータブルなコレクションを構築し、そのアクセス方法を理解します。

「listOf、setOf、mapOf:読み取り専用コレクション」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

3つのビルダー関数

Kotlin の stdlib には、listOf、setOf、mapOf が用意されており、読み取り専用のコレクションを構築できます。読み取り専用とは、インターフェースを通じて要素を追加したり削除したりできないという意味です。

リストの構築

listOfは読み取り専用のList<T>を作成します。要素の型は引数から推論されます。

fun main() {
    val fruits = listOf("apple", "banana", "cherry")
    println(fruits)        // [apple, banana, cherry]
    println(fruits.size)   // 3
}

セットの構築

setOfは読み取り専用のSet<T>を返します。重複する要素は自動的にまとめられます。

fun main() {
    val tags = setOf("kotlin", "java", "kotlin", "android")
    println(tags) // [kotlin, java, android]
    println(tags.size) // 3
}

マップの構築

mapOfはkey to valueのペアを受け取り、読み取り専用のMap<K, V>を返します。

fun main() {
    val ages = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    println(ages.keys)     // [Alice, Bob]
}

型アノテーション

推論された型が正しくない場合やリストが空の場合は、型パラメーターを明示してください。

fun main() {
    val empty: List<String> = listOf()
    val numbers: List<Int> = listOf(1, 2, 3)
    val emptyMap: Map<String, Int> = mapOf()
    println("empty=${empty}, n=${numbers}, m=${emptyMap}")
}

空のコレクション用バリエーション

空のコレクションを明示的に作成したい場合は、emptyList()、emptySet()、emptyMap()を使用します。意図を明確にしたい場合は、型パラメーター付きのlistOf()よりも適しています。

fun main() {
    val xs = emptyList<String>()
    val ys = emptySet<Int>()
    val zs = emptyMap<String, Int>()
    println("${xs.size}, ${ys.size}, ${zs.size}") // 0, 0, 0
}

読み取り専用とは本当に読み取り専用

Listインターフェースにはaddがありません。コンパイラーは変更操作を拒否します。

fun main() {
    val items = listOf(1, 2, 3)
    // items.add(4) // ERROR: List has no add
    val bigger = items + 4 // creates new list
    println(bigger) // [1, 2, 3, 4]
}

内部実装

内部では、listOfはJavaのArrayListを変更不可ビューでラップして返します。読み取り専用とはインターフェース上の契約であり、リフレクションに対して実行時の変更を保証するものではありません。

fun main() {
    val xs = listOf(1, 2, 3)
    println(xs::class.simpleName) // ArrayList
}

Pairとto

中置関数toはPair<A, B>を作成します。マップリテラルやタプルに便利です。

fun main() {
    val pair = "key" to 42
    println(pair) // (key, 42)
    val m = mapOf("a" to 1, "b" to 2)
    for ((k, v) in m) println("$k -> $v")
}

読み取り専用コレクションの反復

読み取り専用コレクションでは、for、forEach、map、filterなど、標準的な反復パターンをすべて使用できます。

fun main() {
    val nums = setOf(1, 2, 3, 4)
    val doubled = nums.map { it * 2 }
    println(doubled) // [2, 4, 6, 8]
}

リストの連結

+演算子は、結合した新しいリストを生成します(読み取り専用の性質も維持されます)。

fun main() {
    val a = listOf(1, 2)
    val b = listOf(3, 4)
    val combined = a + b
    println(combined) // [1, 2, 3, 4]
}

確認問題

listOf(1, 2, 3)で作成したリストに対してadd(4)を呼び出すと、どうなりますか。

まとめ

listOf、setOf、mapOfは読み取り専用のコレクションを作成します。これらのインターフェースを通じて変更することはできません。+を使って新しいコレクションを作成し、型付きの空のコレクションにはemptyList()/emptySet()/emptyMap()を使用します。

よくある質問

「listOf、setOf、mapOf:読み取り専用コレクション」レッスンは無料ですか?

はい。「listOf、setOf、mapOf:読み取り専用コレクション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「listOf、setOf、mapOf:読み取り専用コレクション」で何を学びますか?

イミュータブルなコレクションを構築し、そのアクセス方法を理解します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「listOf、setOf、mapOf:読み取り専用コレクション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. listOf、setOf、mapOf:読み取り専用コレクション
  2. mutableListOf、mutableMapOf:可変コレクションの構築
  3. 要素へのアクセス:get、first、last、getOrNull
  4. 標準ライブラリでコレクションを反復・変換する
← Kotlin Academyに戻る