https://www.runoob.com/java/java-modifier-types.html
https://www.liaoxuefeng.com/wiki/1252599548343744/1260456790454816
HashSet 类继承 AbstractSet,实现 Set 接口、实现了 Cloneable 接口以及序列化 Serializable 接口~ 如:
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable
所以,其具备 Set 的基本特性之外,也支持克隆以及序列化相关能力。
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; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object();
从上述代码可以看出,HashSet 内部使用了 HashMap,还有一个 static final 定义的对象 PRESENT~ 具体 map 和 PRESENT 是如何使用的?我们在接下来的代码实现分析中介绍
构造函数的实现
默认构造函数源代码
/** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default initial capacity (16) and load factor (0.75). */ public HashSet() { map = new HashMap<>(); }