9.Set

Set構造は、要素を順番付けしないで管理するデータ構造です。
「HashSet」「TreeSet」の2種類があります。

Set構造

Listのような順番付けや、Mapのようなキー管理もないため、要素の取得にはIteratorや拡張for構文で取得します。
このようなことからHashSetは要素の取得順は保証されませんが、TreeSetは自動ソートされて管理されるのでソートされた順番で要素が取得されます。
また、HashSetは要素にnullを使用する事が可能ですが、TreeSetはnullを使用する事ができません。
Set構造は、要素の重複は不可です。(同じキーがセット(add)された場合は上書きされます。)

セット(HashSet)

HashSet も配列を扱いますが、要素の重複が許されない、順序の保障が無い点が ArrayList や LinkedList と異なります。要素を参照する際には Iterator を用います。

§HashSetTest.java
import java.util.*;

class HashSetTest {
    public static void main(String[] args) {
        HashSet set = new HashSet();
        set.add("AAA");
        set.add("BBB");
        set.add("CCC");
        set.add("AAA");
        Iterator it = set.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

実行結果は下記のようになります。AAA を 2回 add() していますが、重複要素がひとつにマージされます。結果の順序は add() した順序に関係なくバラバラになります。

C:java>java HashSetTest
CCC
AAA
BBB

下記などのメソッドが用意されています。

  • set.add(o) – オブジェクト o を配列の末尾に追加する
  • set.clear() – 配列をクリアする
  • set.contains(o) – オブジェクト o と等しい要素があるか調べる
  • set.isEmpty() – 空かどうか調べる
  • set.remove(o) – オブジェクト o にマッチする要素を削除する
  • set.size() – 要素の個数を得る

2016-09-04 (4)

セット (TreeSet)

TreeSet も HashSet と同じように使用できます。要素が自動的にソートされる点が HashSet と異なります。

§HashSetTest.java
import java.util.*;

class TreeSetTest {
    public static void main(String[] args) {
        TreeSet set = new TreeSet();
        set.add("CCC");
        set.add("AAA");
        set.add("BBB");
        set.add("AAA");
        Iterator it = set.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

C:java>java TreeSetTest
AAA
BBB
CCC

2016-09-04 (3)

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


Related Post

Algorithms and Data StructuresAlgorithms and Data Structures

授業概要  ソートとコレクションを中心にアルゴリズムとデータ構造に関する基本を学習する。 Java言語によるプログラミング技術の基本事項を習得する。 特にアルゴリズムとデータ構造の理解を中心に、講義および演習を行う。 授業の到達目標 ・オブジェクト指向言語の概念を理解するとともに、Javaを用いて課題を解決するスキルを身につける。 ・アプリケーションの開発に必要な概念を理解するとともに、Java言語を用いて実用的なWebアプリケーションの開発が行えるようになる。 事前・事後学習の内容 予習としてMyWasedaに掲載するレジュメの事前読了を求めることがあります。各回の予習には90分~120分かかると想定されます。 授業計画 1: 本講義の目的と進め方について説明する。最終的に作成するアプリケーションの実例を説明する。 2: 基本概念を理解する。Javaのインストールからコマンドライン実行の方法を学ぶ。 3: 基本的なアルゴリズムを学ぶ。 4: 基本的なデータ構造を学ぶ。 5: 探索アルゴリズムを学ぶ。 […]

Reference(jp)Reference(jp)

「明解 Javaによるアルゴリズムとデータ構造」  柴田 望洋 (著)ソフトバンククリエイティブ (2007/11/7) 「明解Java 入門編」  柴田 望洋 (著)ソフトバンククリエイティブ(2007/8/8) http://bohyoh.com/Java/ 「Javaによるはじめてのアルゴリズム入門」(河西朝雄著、技術評論社、2001年) 「標準Javaプログラミングブック」(河西朝雄著、技術評論社、2001年) とほほのJava入門 (http://www.tohoho-web.com/java/index.htm )

ReferenceReference

【参考文献(英語)】 http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/ — Algorithms and Data Structures Research & Reference Material https://www.cs.auckland.ac.nz/software/AlgAnim/ppt/ — Data Structures and Algorithms, PowerPoint slides https://www.cs.auckland.ac.nz/software/AlgAnim/ds_ToC.html […]