HashSet简介
- 它继承AbstractSet,实现了Set接口,Cloneable,java.io.Serializable
- HashSet是一个没有重复元素的集合
- 它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用null
1,成员变量
static final long serialVersionUID = -5024744406713321676L;
//HashSet是通过map(HashMap对象)保存内容的
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
// PRESENT是向map中插入key-value对应的value
// 因为HashSet中只需要用到key,而HashMap是key-value键值对;
// 所以,向map中添加键值对时,键值对的值固定是PRESENT
private static final Object PRESENT = new Object();
2,构造方法
//默认构造函数
public HashSet() {
//调用HashMap的默认构造函数,创建Map
map = new HashMap<E,Object>();
}
public HashSet(Collection<? extends E> c) {
// 创建map。
// 将集合(c)中的全部元素添加到HashSet中
map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
// 指定HashSet初始容量和加载因子的构造函数
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<E,Object>(initialCapacity, loadFactor);
}
// 指定HashSet初始容量的构造函数
public HashSet(int initialCapacity) {
map = new HashMap<E,Object>(initialCapacity);
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}
3,一些方法
add():添加元素到集合中
调用了HashMap的put方法,将value值设置为默认,返回map.put()==null
如果添加的值有重复则,add()会返回false。如果添加的值在集合中是第一次出现那么会返回true
add时key为null时也会返回true
remove():删除元素
iterator():迭代器方法
也是调了HashMap的keySet().iterator()