HashSet的实现相对比较简单。它强依赖于HashMap,包括底层数据实际上就是存储于HashMap,由于HashMap在哈希碰撞下,如果value值相同,那么将会覆盖该value,HashSet正是利用这一特性来达到元素唯一的。
一属性
定义一个HashMap装载数据,定义一个final的Object来做为HashMap的value。
public class MyHashSet<E> { private transient MyHashMap<E, Object> map; private transient final Object value = new Object(); }
添加构造方法
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);
}
二方法
1增加
返回空表示添加成功,不为空表示已经存在该元素。
public boolean add(E e){
return map.put(e, value) == null;
}
2删除
public void remove(E e){
map.remove(e);
}
3迭代
直接从HashMap得到迭代器。
public class MyHashSet<E> implements Iterable<E>{
public Iterator<E> iterator(){
return map.keySet().iterator();
}
}