系列文章:
- JDK源码分析-transient关键字
- JDK源码分析-transient关键字
- JDK源码分析-String
- JDK源码分析-AbstractStringBuilder
- JDK源码分析-StringBuffer和StringBuilder
- JDK源码分析-RandomAccess
- JDK源码分析-ArrayList
- JDK源码分析-LinkedList
- JDK源码分析-HashMap
- JDK源码分析-HashSet
- JDK源码分析-LinkedHashMap
- JDK源码分析-ConcurrentHashMap
类申明
HashSet这个类实现了Set集合,实际为一个HashMap的实例。对集合的迭代次序没有任何保证; 特别是,它不能保证订单会随着时间的推移保持不变。这个类允许null 元素。
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
构造函数
HashSet提供了4个public构造函数和一个protected(第5个)
- HashSet()
- HashSet(Collection<? extends E> c)
- HashSet(int initialCapacity, float loadFactor)
- HashSet(int initialCapacity)
- HashSet(int initialCapacity, float loadFactor, boolean dummy) 其中默认的构造函数代码如下:
public HashSet() {
map = new HashMap<>();
}
也就是,HashSet底层是基于HashMap存储的,所有其他对于HashSet的操作,本质上是基于HashSet所持有的HashMap的操作,
private transient HashMap<E,Object> map;
其中HashSet的值对应map的Key,而map中所存储Key对应的Value是new Object() 也就是定下的:
private static final Object PRESENT = new Object();