libro
www.tuyano.com
初心者のためのJava SEプログラミング入門

コレクション・フレームワーク (3/5)

作成:2012-05-06 10:24
更新:2012-05-06 10:24

■HashSetによる集合の利用

続いて、「集合」についてです。これは「Set」というインターフェイスを実装したクラスとして用意されています。いくつかあるのですが、一般的に用いられるのは「HashSet」というクラスでしょう。

HashSetは、多数の値を保管するものです。これは、ArrayListと同じように「add」メソッドを使って行います。非常に重要なのは、「インデックス番号は、ない」ということでしょう。つまり、番号付けして管理されてはいないのです。

「じゃあ、保管したものをどうやって取り出せばいいんだ?」と思った人。あなたは、Setの使い方を間違えています。Setは「集合」なのです。つまり、「値を保管するためのもの」ではない、と考えるべきです。行えるのは、「そのオブジェクトは、集合に含まれているか」を調べること、あるいは集合に含まれている全要素を取り出して調べること、などです。値を保管して、必要に応じて手軽に取り出せる、というような用途のものではないのですね(そもそも、そういうことをしたければリストを使うべきでしょう)。

HashSetの作成は、引数を持たないコンストラクタを使います。
HashSet 変数 = new HashSet();
こんな具合ですね。では、HashSetに用意されている主なメソッドについて簡単に整理しておきましょう。

・オブジェクトの追加/削除
《HashSet》.add( 値 );
boolean 変数 = 《HashSet》.remove( 値 );
add」メソッドは、値をHashSetに追加します。引数に、追加する値を用意しておきます。追加されているオブジェクトをHashSetから取り除きたい時は、「remove」を使います。引数に、取り除く値を指定します。その値がHashSetに含まれていてもいなくてもエラーにはなりません。含まれていた場合はtrueが、いなければfalseが返されるのでそれで確認できるでしょう。

・値が集合に含まれているか調べる
boolean 値 = 《HashSet》.contains( 値 );
contains」は、引数に指定した値がそのHashSetに含まれているかどうかをチェックするものです。含まれていればtrue、いなければfalseを返します。

・要素数を返す
int 変数 = 《HashSet》.size();
そのHashSetに含まれている値の数を整数で返すものです。

・全要素を配列として取り出す
Object[] 変数 = 《HashSet》.toArray();
HashSetに含まれている全要素を配列として取り出すものです。返されるのは、Objectの配列になっています。ArrayListと同じように、すべての値は一度Objectにキャストして保管されるので、取り出した後で必要に応じて元のクラスにキャストし直します。


――では、これも簡単な利用例を挙げておきましょう。下のリスト欄に掲載したのは、HashSetを作成し、いくつか値を保管してから、そのすべてを出力するサンプルです。実際にやってみるとわかりますが、addでは4回、値を保管しているのに、出力される値は3つしかありません。これは同じ値(「花子」ですね)を2度addしているためです。

HashSetは「集合」のクラスであり、同じ値を複数保管することはできません。「花子」を何回addしようが、そこには「花子という値が保管されている」という情報があるだけです。保管されている値を順番に取り出しても、1つの「花子」しか見つからないのです。

また、ここではHashSetから値を順番に取り出すのに、このようなやり方をしていますね。
for(Object obj : set){……略……}
このforは、コレクションや配列から順番に要素を取り出して処理するための専用のものです。「for (変数 : コレクション)」というように書くことで、コレクションから順番に値を取り出しては変数に設定する、ということを繰り返していきます。とても重宝する構文なのであわせて覚えておきましょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

import java.util.*;

public class TestApp {

	public static void main(String[] args) {
		HashSet set = new HashSet();
		set.add("太郎");
		set.add("花子");
		set.add("イチロー");
		set.add("花子");
		for(Object obj : set){
			System.out.println(obj);
		}
	}

}

※関連コンテンツ

「初心者のためのJava SEプログラミング入門」に戻る