类信息
hashset 的底层是由hashmap实现
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable
, java
.io
.Serializable
{
static final long serialVersionUID
= -5024744406713321676L
;
private transient HashMap
<E,Object> map
;
private static final Object PRESENT
= new Object();
public HashSet() {
map
= new HashMap<>();
}
}
构造函数
直接使用HashMap指定HashMap的初始化容量以及负载因子指定HashMap的初始化容量
public HashSet() {
map
= new HashMap<>();
}
public HashSet(Collection
<? extends E> c
) {
map
= new HashMap<>(Math
.max((int) (c
.size()/.75f) + 1, 16));
addAll(c
);
}
public HashSet(int initialCapacity
, float loadFactor
) {
map
= new HashMap<>(initialCapacity
, loadFactor
);
}
public HashSet(int initialCapacity
) {
map
= new HashMap<>(initialCapacity
);
}
添加元素
hashmap中的key是不能重复的, 所以就用它来作为set集合的存储, 而map中的value值则为一个空对象。
PRESENT PRESENT = new Object();
public boolean add(E e
) {
return map
.put(e
, PRESENT
)==null
;
}
删除元素
直接使用内部map的方法删除
public boolean remove(Object o
) {
return map
.remove(o
)==PRESENT
;
}
判断空
public boolean isEmpty() {
return map
.isEmpty();
}
包含元素
public boolean contains(Object o
) {
return map
.containsKey(o
);
}
迭代器
直接返回的是Map, key的迭代器
public Iterator
<E> iterator() {
return map
.keySet().iterator();
}
小总结
HashSet的方法实现都借助HashMap来完成的, 所有它的学习就是在学习Hashmap