Setコレクションクラス


Setコレクションクラス


Setインタフェースを実装するクラスは,要素の格納順序を保持せず,同一要素の重複格納を許可しないことを特徴とする.(nullは1つしか保存できません.)オブジェクト全体を操作する場合は、反復器を使用する必要があります.

Setインタフェースメソッド


メソッドは、boolean add(E E)が所与のオブジェクトを保存し、正常に保存された場合はtrueであることを示します.重複オブジェクトの場合はfalse boolean contains(Object o)で指定したオブジェクトが保存されているかどうかを返しますBoolean isEmpty()セットが空かどうか、IterarIterator()は保存されているオブジェクトを一度にインポートしますIteratorはint size()保存されているオブジェクト数void clear()を返します保存されているすべてのオブジェクトを削除しますboolean remove(Object)を削除します

HashSet<E>クラス


JDK 1.2から提供されるクラスは,ハッシュアルゴリズム(hashアルゴリズム)を用いるため探索速度が速い.内部にはHashMapインスタンスを使用して要素を格納します.
Setインタフェースが実装されているため、要素の格納順序は保持されず、格納順序を保持する必要がある場合はLinkedHashSetクラスを使用することができる.(JDK 1.4より提供開始)

繰り返し検査方法


hashCode()の戻り値が同じでequals()の戻り値がtrueの場合、繰り返しとみなされます.

ハッシュアルゴリズム


ハッシュ関数を使用して、ハッシュテーブル(hash table)にデータを格納および取得するアルゴリズム.
Javaでは、配列と接続リストとして実装されます.

格納するデータのキー値をハッシュ関数に入れ、配列のインデックスを求め、そのインデックスの接続リストにデータを格納します.

プロシージャの追加

  • は、要素のhashCode()メソッドの戻り値に基づいて検索範囲を決定する.
  • この範囲の要素をequals()法で比較した.開発者が望むように重複する要素を避けるためには,hashCode,equalsを適切にカバーする必要がある.
    class Animal {
        String species;
        String habitat;
    
        Animal(String species, String habitat) {
            this.species = species;
            this.habitat = habitat;
        }
        
        public int hashCode() { return (species + habitat).hashCode(); }
    
        public boolean equals(Object obj) {
            if(obj instanceof Animal) {
                Animal temp = (Animal)obj;
                return species.equals(temp.species) &&
                habitat.equals(temp.habitat);
            } else {
                return false;
            }
        }
    }
    
    public class Set02 {
        public static void main(String[] args) {
            HashSet<Animal> hs = new HashSet<Animal>();
    
            hs.add(new Animal("고양이", "육지"));
            hs.add(new Animal("고양이", "육지"));
            hs.add(new Animal("고양이", "육지"));
    
            System.out.println(hs.size()); // 1
        }
    }

    TreeSet<E>クラス


    データはソートされた二元探索ツリーの形で要素が格納されるため,追加削除などの基本動作時間が速い.したがって、奇形機によって要素に順次アクセスすることで、値をソート順にアクセスできます.
    JDK 1.2から提供され、NavigableSetインターフェースはRed−Black Treeとして実装される.
    このクラスではSetインタフェースも実装されているため,要素の順序にかかわらず重複する値の格納は許されない.

    TreeSet<Integer> ts = new TreeSet<Integer>();
    
    // add() 메소드를 이용한 요소의 저장
    ts.add(30);
    ts.add(40);
    ts.add(20);
    ts.add(10);
    
    // Enhanced for 문과 get() 메소드를 이용한 요소의 출력
    for (int e : ts) {
        System.out.print(e + " ");
    }
    
    // remove() 메소드를 이용한 요소의 제거
    ts.remove(40);
     
    // iterator() 메소드를 이용한 요소의 출력
    Iterator<Integer> iter = ts.iterator();
    while (iter.hasNext()) {
        System.out.print(iter.next() + " ");
    }
     
    // size() 메소드를 이용한 요소의 총 개수
    System.out.println("이진 검색 트리의 크기 : " + ts.size());
    
    // subSet() 메소드를 이용한 부분 집합의 출력System.out.println(ts.subSet(10, 20));System.out.println(ts.subSet(10, true, 20, true));

    サブセット()メソッド


    ①第1の場合、第1のパラメータ値に対応する要素から第2のパラメータ値に対応する要素に戻る前.
    ②回の場合、コールに両端の要素が含まれているかを明確にする.

    Reference


    http://tcpschool.com/java/java_collectionFramework_set