4.5. Set
Collectionを拡張して要素の重複を「禁止する」インターフェースです。
『JDK1.4 API Javadoc より抜粋』---
重複要素のないコレクションです。
すなわち、セットは、e1.equals(e2)であるe1とe2の要素ペアは持たず、
null 要素を最大 1 つしか持ちません。
その名前が示すように、このインターフェースは数学で言う集合の抽象化をモデル化します。
---
以下のクラスは Set インターフェースを実装しています。
HashSet
ハッシュを使ったSetのデフォルト実装です。
要素数によらない高速な検索が可能です。
ただし保持する要素の順序は保証しません。
LinkedHashSet
重複要素を保持しません。
また、要素の挿入順を保持します。
TreeSet
2分木の一種、Red-Black Treeを使ったSortedSetインターフェースの実装です。
保持する要素は、自然順序もしくはコンストラクタに指定された
Comparatorに従って昇順にソートされます。
Setインターフェースを実装したそれぞれのクラスがどのように振る舞うか確認します。
int[] intArray = {5, 8, 2, 9, 1, 5};
for(int i = 0; i < intArray.length; i++) {
exSet.add(new Integer(intArray[i])); // 要素を追加
}
System.out.println(exSet); // 要素を表示
結果はこのようになります。
| Set |
要素の並び |
備考 |
| HashSet |
2, 9, 8, 1, 5 (ランダム) |
順序は保証されないので
並びは不定 |
| TreeSet |
1, 2, 5, 8, 9 |
昇順に並ぶ |
| LinkedHashSet |
5, 8, 2, 9, 1 |
追加した順に並ぶ |
「5」は重複せず一つだけ保持されます。
『おまけ』
Red-Black Tree
二分検索木の実装の中で一番効率がいいらしい。
詳しいことはデータ構造に関する
書籍やWebサイトを参照してみてください。