【Java】コレクション ~ Set 編~

Set

 * 重複がないコレクション

利点 / 使いどころ

 * Listと比較して、パフォーマンスがいい
   (以下の参考文献のサンプルを実行させれば分かるが速度は明らかに違う)
http://d.hatena.ne.jp/greennoah/20090114/1231936654
http://mosamosaatama.blogspot.jp/2010/02/arraylisthashsethashmapcontains.html

注意

 * Listのようにget(0)やget(3)などにより、値を直接取得することができない
 (ループで回すか、配列に変更してから取得することになる)
 * 要素の重複は不可

主なメソッド

containsAll

 * 指定されたコレクションのすべての要素がセット内にある場合に true を返す

Setの種類

HashSet

 * 要素にnullを使用可能
 * 保持する要素の順序は保証されない

TreeSet

 * 要素にnullを使用不可

LinkedHashSet

 * 要素の挿入される挿入順を保持される

EnumSet

 * Enum用のSet(詳細は、以下の関連記事を参照のこと)
列挙型 / enum型 ~応用編 / EnumMap / EnumSet ~
http://blogs.yahoo.co.jp/dk521123/34469119.html

Setあれこれ

■ Set <=> Listに変換するには

# List -> Set
Set sampleSet = new HashSet(list);

# Set -> List
List sampleList = new ArrayList(set);

# 以下でもできる。
#
# sampleList.addAll(set);

■ 読み取り専用(Readonly)のSetにするには

* 「Collections.unmodifiableSet」「Collections.unmodifiableSortedSet」を使用する
Set<String> readonlySets = Collections.unmodifiableSet(sampleSet);
http://docs.oracle.com/javase/jp/6/api/java/util/Collections.html

■ カスタムソート

 * 以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/32156111.html

参考文献

API仕様

http://docs.oracle.com/javase/jp/6/api/java/util/Set.html

その他

http://www.javaroad.jp/java_collection3.htm
* 他のコレクションとの比較や構造が図にしてあって分かりやすい
http://java-reference.sakuraweb.com/java_collection_compare.html

関連記事

コレクション ~ List 編~

http://blogs.yahoo.co.jp/dk521123/32156111.html

コレクション ~ Map編~

http://blogs.yahoo.co.jp/dk521123/33002154.html

コレクション ~ Set 編~

http://blogs.yahoo.co.jp/dk521123/33006348.html

コレクション ~ Queue 編~

http://blogs.yahoo.co.jp/dk521123/33006366.html

コレクション ~ マルチスレッド 編~

http://blogs.yahoo.co.jp/dk521123/34006868.html

列挙型 / enum型 ~応用編 / EnumMap / EnumSet ~

http://blogs.yahoo.co.jp/dk521123/34469119.html