概要

集合を表すコンテナ型。複数のオブジェクトを順序の概念なしに格納する。等値のオブジェクトを複数格納することはできない。

型が静的な言語では、格納されている要素の型も静的に決定されている必要がある。

Java

java.util.Set インターフェースがあり、その実装クラスとして java.util.HashSetjava.util.TreeSet などがある。

class java.util.Set | Java Platform SE 8 Javadoc
http://docs.oracle.com/javase/8/docs/api/java/util/Set.html

class java.util.HashSet | Java Platform SE 8 Javadoc
http://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html

class java.util.TreeSet | Java Platform SE 8 Javadoc
http://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html

Scala

Javaの java.util.Set インターフェースやその実装クラスのほかに、 Scalaのコレクションフレームワークとして scala.collection.Set トレイトがある。

順序が関係なく同じオブジェクトを複数格納する必要がない場合はリストだとかよりもこの Set を使うべき。ただそんなときも、自分はscala.collection.Setが共変でないのが邪魔で Seqの類を使ってしまう場合がある。

Set には不変(イミュータブル)なものと可変(ミュータブル)なものがあるが、 scala.Predef.Setscala.collection.immutable.Set の別名として定義されているため、なにもimportせずに Set として参照すると不変な Set になる。

Setのインスタンス生成の例

val st: Set[String] = Set("abc", "def", "ghi");

Python

セット(集合)というデータ型があり、イミュータブル(変更不可)とミュータブル(変更可能)の 2種類がある。集合型ともいう。

集合型 | Python 2.7 documentation
http://docs.python.jp/2/library/stdtypes.html#set-set-frozenset

集合型 | Python 3 documentation
http://docs.python.jp/3/library/stdtypes.html#set-types-set-frozenset

Ruby

重複のないオブジェクトの集合を表すデータ構造として Set というクラスが標準で存在する。ただ、和集合、差集合、積集合などの基本的な演算は普通の配列でもできる。

Set | Ruby 2.2 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.2.0/class/Set.html

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク