Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Kotlin辞典

  1. トップページ
  2. Kotlin辞典
  3. セット — setOf() / mutableSetOf()

セット — setOf() / mutableSetOf()

Kotlinの『setOf()』で不変セット、『mutableSetOf()』で可変セットを作成します。セットは重複なしの集合で、『union()』(和)、『intersect()』(積)、『subtract()』(差)などの集合演算が使えます。

構文
// 不変セットの作成(重複は自動で除去されます)
val fruits = setOf("りんご", "バナナ", "りんご", "オレンジ")
// {りんご, バナナ, オレンジ}(重複1件除去)

// 可変セットの作成
val tags = mutableSetOf("kotlin", "jvm")
tags.add("android")
tags.remove("jvm")

// 集合演算
val a = setOf(1, 2, 3, 4)
val b = setOf(3, 4, 5, 6)
val union = a union b          // {1, 2, 3, 4, 5, 6}
val intersect = a intersect b  // {3, 4}
val subtract = a subtract b   // {1, 2}
メソッド一覧
メソッド概要
setOf(要素...)不変セットを作成します(重複は自動除去)。
mutableSetOf(要素...)可変セットを作成します。
LinkedHashSet<T>()挿入順を保持するセットです。
sortedSetOf(要素...)自然順でソートされたセットです。
セット.contains(要素)要素が含まれるか確認します(in 演算子でも可)。
セット.union(other)和集合(A ∪ B)を返します。
セット.intersect(other)積集合(A ∩ B)を返します。
セット.subtract(other)差集合(A − B)を返します。
MutableSet.add(要素)要素を追加します(重複は無視)。
MutableSet.remove(要素)要素を削除します。
リスト.toSet()リストをセットに変換します(重複除去に使います)。
リスト.distinct()重複を除いたリストを返します(順序保持)。
サンプルコード
fun main() {
    // 基本のセット(重複自動除去)
    val fruits = setOf("りんご", "バナナ", "りんご", "オレンジ", "バナナ")
    println("fruits: $fruits")  // 重複除去済み
    println("サイズ: ${fruits.size}")

    // 存在確認
    println("バナナあり: ${"バナナ" in fruits}")  // true
    println("メロンあり: ${"メロン" in fruits}")  // false

    println()

    // 可変セット
    val langs = mutableSetOf("Kotlin", "Java", "Python")
    langs.add("Swift")
    langs.add("Kotlin")   // 重複 — 無視されます。
    langs.remove("Java")
    println("言語: $langs")

    println()

    // 集合演算
    val set1 = setOf(1, 2, 3, 4, 5)
    val set2 = setOf(3, 4, 5, 6, 7)

    println("和集合: ${set1 union set2}")      // {1,2,3,4,5,6,7}
    println("積集合: ${set1 intersect set2}")  // {3,4,5}
    println("差集合: ${set1 subtract set2}")   // {1,2}
    println("逆差集合: ${set2 subtract set1}") // {6,7}

    println()

    // リストの重複除去
    val names = listOf("Alice", "Bob", "Alice", "Carol", "Bob", "Dave")
    println("元リスト(${names.size}件): $names")

    val unique = names.toSet()
    println("重複除去(${unique.size}件): $unique")

    // distinct() — 順序を保持して重複除去します。
    val distinctList = names.distinct()
    println("distinct(${distinctList.size}件): $distinctList")

    println()

    // 実用例: 共通の友達を見つけます。
    val aliceFriends = setOf("Bob", "Carol", "Dave", "Eve")
    val bobFriends = setOf("Alice", "Carol", "Frank", "Eve")
    val common = aliceFriends intersect bobFriends
    println("共通の友達: $common")
}
概要

セットは「重複なしで存在確認が速い」コレクションです。要素の存在確認(『contains()』)はリストがO(n)なのに対し、セット(HashSet)はO(1)で高速です。大量データで特定の要素が含まれるか頻繁に確認する場合はセットが適しています。

Kotlinの『setOf()』はデフォルトで挿入順を保持する『LinkedHashSet』を使います。挿入順が不要で純粋なHashSetを使いたい場合は『hashSetOf()』を使います。

マップの操作はマップ — mapOf() / mutableMapOf()を、リストの基本はリスト — 生成 / listOf() / mutableListOf()を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。