学习笔记Java集合9-Set-HashSet源码分析
简介集合,这个概念有点模糊。 广义上来讲,java中的集合是指java.util包下面的容器类,包括和Collection及Map相关的所有类。中义上来讲,我们一般说集合特指java集合中的Collection相关的类,不包含Map相关的类。狭义上来讲,数学上的集合是指不包含重复元素的容器,即集合中不存在两个相同的元素,在java里面对应Set。具体怎么来理解还是要看上下文环境。比如,面试别人让你说下java中的集合,这时候肯定是广义上的。 再比如,下面我们讲的把另一个集合中的元素全部添加到Set中,这时候就是中义上的。 HashSet是Set的一种实现方式,底层主要使用HashMap来确保元素不重复。 源码分析属性 // 内部使用HashMap private transient HashMap<E,Object> map; // 虚拟对象,用来作为value放到map中 private static final Object PRESENT = new Object();构造方法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);}// 非public,主要是给LinkedHashSet使用的HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor);}构造方法都是调用HashMap对应的构造方法。 ...