Set構造は、要素を順番付けしないで管理するデータ構造です。
「HashSet」「TreeSet」の2種類があります。
Listのような順番付けや、Mapのようなキー管理もないため、要素の取得にはIteratorや拡張for構文で取得します。
このようなことからHashSetは要素の取得順は保証されませんが、TreeSetは自動ソートされて管理されるのでソートされた順番で要素が取得されます。
また、HashSetは要素にnullを使用する事が可能ですが、TreeSetはnullを使用する事ができません。
Set構造は、要素の重複は不可です。(同じキーがセット(add)された場合は上書きされます。)
セット(HashSet)
HashSet も配列を扱いますが、要素の重複が許されない、順序の保障が無い点が ArrayList や LinkedList と異なります。要素を参照する際には Iterator を用います。
import java.util.*; class HashSetTest { public static void main(String[] args) { HashSet set = new HashSet(); set.add("AAA"); set.add("BBB"); set.add("CCC"); set.add("AAA"); Iterator it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
実行結果は下記のようになります。AAA を 2回 add() していますが、重複要素がひとつにマージされます。結果の順序は add() した順序に関係なくバラバラになります。
C:java>java HashSetTest CCC AAA BBB
下記などのメソッドが用意されています。
- set.add(o) – オブジェクト o を配列の末尾に追加する
- set.clear() – 配列をクリアする
- set.contains(o) – オブジェクト o と等しい要素があるか調べる
- set.isEmpty() – 空かどうか調べる
- set.remove(o) – オブジェクト o にマッチする要素を削除する
- set.size() – 要素の個数を得る
セット (TreeSet)
TreeSet も HashSet と同じように使用できます。要素が自動的にソートされる点が HashSet と異なります。
import java.util.*; class TreeSetTest { public static void main(String[] args) { TreeSet set = new TreeSet(); set.add("CCC"); set.add("AAA"); set.add("BBB"); set.add("AAA"); Iterator it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
C:java>java TreeSetTest AAA BBB CCC