Java Set/HashSetよくある使い方
2009/02/19 13:35Update
Setは重複のないコレクションです。本文はSetおよびその実装の一つHashSetについて、そのよくある使い方を学びます。
特徴
◇ 重複のないコレクション。重複のあるデータを追加しようとしても、追加されません。重複であるかどうかの判定は、格納要素のequalsメソッドで行います。
◇ null要素。null要素を許容しますが、禁止する実装もあります。許容する場合、重複要素を持たないため、null 要素を最大 1 つしか持ちません。因みに、Setインタフェース実装の一つHashSetは、null要素を許容します。なので、格納した要素はnullであることもありますので、細心の注意が必要です。
構造
java.util.Collection [I]
∟java.util.Set [I]
∟java.util.SortedSet [I]
∟java.util.EnumSet
∟java.util.HashSet
∟java.util.LinkedHashSet
∟java.util.TreeSet
次のサンプルは、HashSetから生成されたSetインスタンスのコレクションに要素の追加、要素の取得・削除などについて簡単に説明しています。
Set/HashSetサンプル
コード
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* Java Set/HashSetの使い方についてシンプルなサンプル
*
* 1)Setインスタンスの生成
* 2)Setに要素の追加
* 3)Setから要素の取得
* 4)Setから要素の削除
*/
public class TestHashSet {
public static void main(String []args) {
////////////////////////////////////
//1)HashSetからSetのインスタンスを生成
Set set = new HashSet(); //その他コンストラクタもあります。詳細はAPI DOCを参照
////////////////////////////////////
//2)Setに要素の追加
set.add("Hello Java Set!"); //String型
Integer age = new Integer(100);
set.add(age); //Integer型
set.add(age); //同じオブジェクト重複追加
set.add("Hello Java Set!"); //同じオブジェクト重複追加
set.add(null); //null要素
//set.addAll(Collection); //コレクション型データを一括追加
//... その他型の値の追加もできますよ
////////////////////////////////////
//3)Setから要素の取得
System.out.println("************** Iterator **************");
//反復子iteratorによる取得
Iterator ite = set.iterator(); //実際のプログラム中に、null判定を忘れずに
//コレクションの反復子iterator
while(ite.hasNext()) { //ループ
Object obj = ite.next(); //該当オブジェクト取得
if (obj instanceof String) { //String型の場合
System.out.println((String)obj);
} else if (obj instanceof Integer) { //Integer型の場合
System.out.println(((Integer)obj).intValue());
}
}
System.out.println("************** Set-> Array / for (Object obj : Object []) **************");
//Set を 配列に変換
Object []objs = set.toArray();
//for ループによる取得
for (Object obj : objs) {
if (obj instanceof String) { //String型の場合
System.out.println((String)obj);
} else if (obj instanceof Integer) { //Integer型の場合
System.out.println(((Integer)obj).intValue());
}
}
System.out.println("************** for (Object obj : set) **************");
//Setから直接Object要素を取得。Java5から。
for (Object obj : set) {
if (obj instanceof String) { //String型の場合
System.out.println((String)obj);
} else if (obj instanceof Integer) { //Integer型の場合
System.out.println(((Integer)obj).intValue());
}
}
System.out.println("************** Set要素の削除、サイズ、空判定 **************");
//4)その他
//Setから要素の削除
set.remove(0);
//Setのサイズ取得
System.out.println("size=" + set.size());
//要素があるかどうか
System.out.println("empty=" + set.isEmpty());
}
}
実行結果:
************** Iterator **************
100
Hello Java Set!
************** Set-> Array / for (Object obj : Object []) **************
100
Hello Java Set!
************** for (Object obj : set) **************
100
Hello Java Set!
************** Set要素の削除、サイズ、空判定 **************
size=3
empty=false
100
Hello Java Set!
************** Set-> Array / for (Object obj : Object []) **************
100
Hello Java Set!
************** for (Object obj : set) **************
100
Hello Java Set!
************** Set要素の削除、サイズ、空判定 **************
size=3
empty=false
参考資料
Javaコレクション・フレームワーク概要
Iteratorパターン - イテレータ・パターン - オブジェクト指向設計
java.util.Set のAPI doc
java.util.HashSet のAPI doc
Sponsored Link
Comments
- Relative Articles
- Java開発及び実行環境の構築 | Linux篇 - (2008/08/31 20:34)
- Java開発及び実行環境の構築 | Windows篇 - (2008/08/31 21:18)
- 5分でJava Hello World! - (2008/08/31 22:13)
- Java言語の制御構文 - 条件分岐if/else/else if - (2008/10/01 21:30)
- Java言語の繰り返し制御構文 - for文 - (2008/10/03 18:22)
- Java言語の繰り返し制御構文 - do ... while文 - (2008/10/03 21:23)
- Java言語の繰り返し制御構文 - while文 - (2008/10/03 21:32)
- Java言語の基礎 - javacコマンドによるコンパイル - (2008/10/10 17:58)
- Java アクセス修飾子概要 - (2008/10/29 18:31)
- Javaアノテーション機能 概要 - (2009/02/12 13:06)