HashSet類の実現原理、特徴
18265 ワード
HashSetは、ハッシュ・テーブルによってサポートされるSetインタフェースを実装する.setの反復順序を保証しません.特に、この順序が恒久的に変わらないことを保証しません.
- public class HashSet<E>
- extends AbstractSet<E>
- implements Set<E>, Cloneable, java.io.Serializable
- {
- static final long serialVersionUID = -5024744406713321676L;
-
- // HashMap HashSet 。
- private transient HashMap<E,Object> map;
-
- // Object HashMap value, static final。
- private static final Object PRESENT = new Object();
-
- /**
- * , HashSet。
- *
- * HashMap, 16 0.75。
- */
- public HashSet() {
- map = new HashMap<E,Object>();
- }
-
- /**
- * collection set。
- *
- * 0.75
- * collection HashMap。
- * @param c set collection。
- */
- public HashSet(Collection<? extends E> c) {
- map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
- addAll(c);
- }
-
- /**
- * initialCapacity loadFactor HashSet。
- *
- * HashMap。
- * @param initialCapacity 。
- * @param loadFactor 。
- */
- public HashSet(int initialCapacity, float loadFactor) {
- map = new HashMap<E,Object>(initialCapacity, loadFactor);
- }
-
- /**
- * initialCapacity HashSet。
- *
- * loadFactor 0.75 HashMap。
- * @param initialCapacity 。
- */
- public HashSet(int initialCapacity) {
- map = new HashMap<E,Object>(initialCapacity);
- }
-
- /**
- * initialCapacity loadFactor 。
- * , , LinkedHashSet 。
- *
- * LinkedHashMap 。
- * @param initialCapacity 。
- * @param loadFactor 。
- * @param dummy 。
- */
- HashSet(int initialCapacity, float loadFactor, boolean dummy) {
- map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
- }
-
- /**
- * set 。 。
- *
- * HashMap keySet key。
- * HashSet , HashMap key ,
- * value static final Object 。
- * @return set Iterator。
- */
- public Iterator<E> iterator() {
- return map.keySet().iterator();
- }
-
- /**
- * set (set )。
- *
- * HashMap size() Entry , Set 。
- * @return set (set )。
- */
- public int size() {
- return map.size();
- }
-
- /**
- * set , true。
- *
- * HashMap isEmpty() HashSet 。
- * @return set , true。
- */
- public boolean isEmpty() {
- return map.isEmpty();
- }
-
- /**
- * set , true。
- * , set (o==null ? e==null : o.equals(e))
- * e , true。
- *
- * HashMap containsKey key。
- * @param o set 。
- * @return set , true。
- */
- public boolean contains(Object o) {
- return map.containsKey(o);
- }
-
- /**
- * set , 。
- * , set (e==null ? e2==null : e.equals(e2))
- * e2, set e。
- * set , set false。
- *
- * key HashMap。
- * HashMap put() key-value , HashMap Entry key
- * Entry key (hashCode() , equals true),
- * Entry value Entry value, key ,
- * HashSet , HashMap ,
- * , Set 。
- * @param e set 。
- * @return set , true。
- */
- public boolean add(E e) {
- return map.put(e, PRESENT)==null;
- }
-
- /**
- * set , 。
- * , set (o==null ? e==null : o.equals(e)) e,
- * 。 set , true
- * ( : set , true)。( , set )。
- *
- * HashMap remove Entry。
- * @param o set 。
- * @return set , true。
- */
- public boolean remove(Object o) {
- return map.remove(o)==PRESENT;
- }
-
- /**
- * set 。 , set 。
- *
- * HashMap clear Entry 。
- */
- public void clear() {
- map.clear();
- }
-
- /**
- * HashSet : 。
- *
- * HashMap clone() , HashMap , HashSet 。
- */
- public Object clone() {
- try {
- HashSet<E> newSet = (HashSet<E>) super.clone();
- newSet.map = (HashMap<E, Object>) map.clone();
- return newSet;
- } catch (CloneNotSupportedException e) {
- throw new InternalError();
- }
- }
- }