HashSet源码分析
程序员文章站
2022-07-02 14:10:05
1、类的基本信息 继承与接口关系: 成员变量: 底层是基于HashMap实现的。 里的值对应的是map的key。map的value全部是 。 构造方法: 2、部分方法 add()方法: remove()方法: contains()方法: 用的都是 的方法。 ......
1、类的基本信息
继承与接口关系:
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable
成员变量:
private transient HashMap<E,Object> map; // 虚拟的值,对应map中的value private static final Object PRESENT = new Object();
HashSet
底层是基于HashMap实现的。HashSet
里的值对应的是map的key。map的value全部是PRESENT
。
构造方法:
/** * 默认构造器,HashMap实例默认容量16,负载因子0.75 */ public HashSet() { map = new HashMap<>(); } /* * 这个包级别访问权限的构造器只被LinkedHashSet使用 */ HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
2、部分方法
add()方法:
public boolean add(E e) { // 用的就是map的方法 @_@ return map.put(e, PRESENT)==null; }
remove()方法:
public boolean remove(Object o) { return map.remove(o)==PRESENT; // 同上 }
contains()方法:
public boolean contains(Object o) { return map.containsKey(o); }
用的都是HashMap
的方法。
上一篇: 哲学家的愚蠢
下一篇: Python第二天 (数据类型,变量 )