HashSet的實現相對比較簡單。它強依賴於HashMap,包括底層數據實際上就是存儲於HashMap,因爲HashMap在哈希碰撞下,若是value值相同,那麼將會覆蓋該value,HashSet正是利用這一特性來達到元素惟一的。spa
一屬性code
定義一個HashMap裝載數據,定義一個final的Object來作爲HashMap的value。blog
public class MyHashSet<E> { private transient MyHashMap<E, Object> map; private transient final Object value = new Object(); }
添加構造方法rem
public MyHashSet(){ map = new MyHashMap<E, Object>(); } public MyHashSet(int initCount){ map = new MyHashMap<E, Object>(initCount); } public MyHashSet(int initCount, float loadFactor){ map = new MyHashMap<E, Object>(initCount, loadFactor); }
二方法it
1增長class
返回空表示添加成功,不爲空表示已經存在該元素。map
public boolean add(E e){ return map.put(e, value) == null; }
2刪除迭代器
public void remove(E e){ map.remove(e); }
3迭代float
直接從HashMap獲得迭代器。方法
public class MyHashSet<E> implements Iterable<E>{ public Iterator<E> iterator(){ return map.keySet().iterator(); } }