[Java]HashSetの仕組み

3312 ワード

  • 概要This class implements the Set interface,backed by a hash table(actually a HashMap instance).It makes no guarantees as to the iteration order of the set;In particular,it does not guarantethat the order will remain constant over time.This class permits the null element.HashSetはHashMapに基づいて実現され、操作が簡単で、HashMapを一度「パッケージ」したように、HashMapのkeyだけを使って様々な特性を実現しているので、まずこの構造を感性的に認識してみましょう.
    HashSet<String> set = new HashSet<String>();
    set.add("  ");
    set.add("  ");
    set.add("  ");
    set.add("  ");
    set.add("  ");
    set.add("  ");
    set.add("  ");
    set.add("  ");

    その大まかな構成は次のとおりです.
    private transient HashMap<E,Object> map;
    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();
    mapHashSet全体のコアであり、PRESENTは偽のvalueを作るために使用される.2.基本操作
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
    
    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
    
    public boolean contains(Object o) {
        return map.containsKey(o);
    }
    
    public int size() {
        return map.size();
    }

    基本的な操作も非常に簡単で、HashMapを呼び出す関連方法で、valueは前のdummyのObjectです.だから、HashMapの実現を知ればいいのです.