ScalaのコレクションフレームワークにおけるSetは、重複のない要素の集合を表すデータ構造です。数学的な集合と同様に、各要素は一意であり、順序は保証されません。ScalaのSetはイミュータブル版とミュータブル版の両方が用意されていますが、デフォルトではイミュータブルなSetが使用されます。
1. 基本的な特徴
-
重複不可:同じ値を複数回追加しても、1つしか格納されません。
-
順序非保証:Setの要素の順番は保証されません(ただし
SortedSetやLinkedHashSetなど、順序を意識した実装もあります)。 -
イミュータブル/ミュータブルの両方をサポート
2. Setの基本的な使用例(イミュータブル)
要素の追加:
要素の削除:
3. ミュータブルSetの使用例
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