Set

ScalaのコレクションフレームワークにおけるSetは、重複のない要素の集合を表すデータ構造です。数学的な集合と同様に、各要素は一意であり、順序は保証されません。ScalaのSetはイミュータブル版とミュータブル版の両方が用意されていますが、デフォルトではイミュータブルなSetが使用されます。


1. 基本的な特徴

  • 重複不可:同じ値を複数回追加しても、1つしか格納されません。

  • 順序非保証:Setの要素の順番は保証されません(ただしSortedSetLinkedHashSetなど、順序を意識した実装もあります)。

  • イミュータブル/ミュータブルの両方をサポート


2. Setの基本的な使用例(イミュータブル)

scala
val fruits = Set("apple", "banana", "orange") println(fruits) // Set(apple, banana, orange) println(fruits.contains("apple")) // true

要素の追加:

scala
val newFruits = fruits + "grape" println(newFruits) // Set(apple, banana, orange, grape)

要素の削除:

scala
val fewerFruits = fruits - "banana" println(fewerFruits) // Set(apple, orange)

3. ミュータブルSetの使用例

scala
import scala.collection.mutable.Set val animals = Set("cat", "dog") animals += "rabbit" println(animals) // Set(cat, dog, rabbit)

mutable.Setでは、元の集合そのものが変更されます。


4. 主な操作メソッド

メソッド 説明
+ 要素を追加(新しいSetを返す)
- 要素を削除(新しいSetを返す)
contains(elem) 指定した要素が含まれているか確認
isEmpty 空集合かどうか確認
size 要素数を返す
union (` `)
intersect (&) 積集合を返す
diff (&~) 差集合を返す
foreach 各要素に対して操作を実行

5. Setのバリエーション

  • SortedSet: 要素を自然順序(または指定された順序)で保持

  • LinkedHashSet: 挿入順を保持するSet

  • BitSet: 整数のSetに特化したメモリ効率の良い実装(非負整数)


6. イミュータブルとミュータブルの選択基準

  • イミュータブルSet:関数型スタイルのコードに適しており、安全性と予測可能性が高い。

  • ミュータブルSet:頻繁な更新が求められる場面で効率的。


まとめ

ScalaのSetは、重複を許さず、集合的な演算(和・積・差)を簡潔に扱える非常に便利なデータ構造です。用途や設計方針に応じてイミュータブルとミュータブルを使い分けることが重要です。

生成日:2025/05/04