Set インタフェース (HashSet / TreeSet)

重複要素のないコレクションで, 数学の [集合] に相当する:

Collection インタフェースを実装する
重複要素を保持できない
コレクション内のオブジェクトの順番を管理することができない

HashSet

HashSet は, HashMap のインスタンスを基づく Set インタフェースを実装する. このクラスでは, セットの繰り返し順序について保証しない.

HashSet の主なメソッド

add: 指定された要素が既に Set に存在しなければその要素をセットする
clear: セットからすべての要素を削除する
contains: 指定された値がセットに含まれるかどうかを真偽値で返す
isEmpty: セットが空きであるかどうかを真偽値で返す
iterator: セットの要素の反復子を返す
remove: 指定した要素があればセットから削除する
size: セット内にある要素の数を返す

HashSet の使い方

HashSetTest.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.HashSet;

public class HashSetTest{
    public static void main(String[] args){
	HashSet<Integer> hs = new HashSet<Integer>();

	for(int i = 5; i <= 20; i++){
	    hs.add( new Integer(i) );
	}

	for(int i = 5; i <= 15; i++){
	    hs.add( new Integer(i) );
	}

	System.out.println( "HashSet Size: " + hs.size() );
	System.out.println( "HashSet: " + hs );

	System.out.println( hs.contains(10) );
	System.out.println( hs.contains("10") );

	System.out.println( hs.iterator() );

	hs.add(10);
	System.out.println( "HashSet Size: " + hs.size() );

	hs.add(100);
	System.out.println( "HashSet Size: " + hs.size() );
	
	hs.add( new Integer("1000") ); // "1000" 文字列にしても大丈夫
	System.out.println( "HashSet: " + hs );
	System.out.println( "HashSet Size: " + hs.size() );
	System.out.println( hs.iterator() );

	
    }
}

HashSetTest.java の実行結果は:

[wtopia java.cf]$ java HashSetTest
HashSet Size: 16
HashSet: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 16, 19, 18, 20]
true
false
java.util.HashMap$KeyIterator@147ee05
HashSet Size: 16
HashSet Size: 17
HashSet: [100, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 1000, 16, 19, 18, 20]
HashSet Size: 18
java.util.HashMap$KeyIterator@15b9e68

HashSet はどのような順序で格納されるか保証されていないため, 出力も格納順序ではなくバラバラで出力されていると思う.

HashSet の全要素へアクセス

AccessHashSet.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.HashSet;
import java.util.Iterator;

public class AccessHashSet{
    public static void main(String[] args){
	HashSet<String> hs = new HashSet<String>();

	hs.add("鈴木さん");
	hs.add("中田さん");
	hs.add("高橋さん");
	hs.add("堀北さん");
	hs.add("小林さん");
	hs.add("趙飛さん");

	Iterator it = hs.iterator();

	System.out.println(it);

	while( it.hasNext() ){
	    System.out.println( it.next() );
	}
    }
}

AccessHashSet.java の実行結果は:

[wtopia java.cf]$ java AccessHashSet
java.util.HashMap$KeyIterator@15b9e68
堀北さん
趙飛さん
鈴木さん
小林さん
中田さん
高橋さん