导读:在java8无序不重复集合,是通过HashSet类实现。今天我们来阅读HashSet这个类,简单分析一下,来进一步的认识它。
类成员
//借助HashMap实现的.
private transient HashMap<E,Object> map;
// 这个就是HashMap中key-value中的value
private static final Object PRESENT = new Object();
在HashMap中key是做了重复处理的,保证不会重复,PRESENT这个就是一个value值,作用就是传参占位。
创建对象 new HashMap()
public HashSet() {
//HashMap默认长度是16
map = new HashMap<>();
}
//Collection类型数据
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
//一次性的赋值
addAll(c);
}
//定义map的长度,和负载因子
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
//定义map的长度
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
//dummy作用:区别不同的构造方法
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
//LinkedHashMap是HashMap的派生类
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
添加元素 add()
//调用map.put方法,保存元素。key值为E类型,value值为PRESENT(Object)
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
移除元素 remove()
//调用map.remove方法,保存元素
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
最后,这个类的封装是非常简单的,前提是熟悉HashMap类实现,点击这儿可以去认识一下。
点个赞呗 ≧◠◡◠≦