Setインターフェース
コレクションフレームワークに属するSetインターフェースはListインターフェースと違い、要素を追加した順番を管理しません。また、同じ値のオブジェクトはセットの中に複数追加できません。
指定の要素が集合の中にあるか否かを素早く確認するなどに有効です。
0から始まるインデックスを持たないため、要素の取り出しには拡張for文、またはiteratorだけが使用できます。
Listインターフェースの実装にはHashSetとTreeSetがあります。
まずHashSetクラスですが、これはハッシュを使って、要素の保存場所を決定するので、要素の追加・削除が、要素の数に関わらず一定の時間で実行できます。
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetSample {
public static void main(String[] args) {
Set<String> set=new HashSet<>( );
System.out.println(set.size());
System.out.println("---------------");
set.add("Bach");
set.add("Chopin");
set.add("Anonymous");
for(String str: set) {
System.out.println(str);
}
System.out.println("---------------");
set.add("Anonymous");
for(Iterator<String> it = set.iterator(); it.hasNext();) {
System.out.println(it.next());
}
System.out.println("---------------");
System.out.println("Set contains \"Chopin\":" + set.contains("Chopin"));
set.remove("Anonymous");
System.out.println(set);
}
}
実行結果です。
0
—————
Chopin
Bach
Anonymous
—————
Chopin
Bach
Anonymous
—————
Set contains “Chopin”:true
[Chopin, Bach]
>
次はTreeSet
基本的な仕様はHashSetと変わりませんが、要素を辞書順にソートして管理します。
import java.util.Set;
import java.util.TreeSet;
import java.util.Iterator;
public class TreeSetSample {
public static void main(String[] args) {
Set<String> set=new TreeSet<>( );
System.out.println(set.size());
System.out.println("---------------");
set.add("Bach");
set.add("Chopin");
set.add("Anonymous");
for(String str: set) {
System.out.println(str);
}
System.out.println("---------------");
set.add("Anonymous");
for(Iterator<String> it = set.iterator(); it.hasNext();) {
System.out.println(it.next());
}
System.out.println("---------------");
System.out.println("Set contains \"Chopin\":" + set.contains("Chopin"));
set.remove("Anonymous");
System.out.println(set);
}
}
実行結果です。
>java SetSample
0
—————
Anonymous
Bach
Chopin
—————
Anonymous
Bach
Chopin
—————
Set contains “Chopin”:true
[Bach, Chopin]
>