源码解析(JDK1.8)之——LinkedHashSet

1 LinkedHashSet

1.1 底层结构
LinkedHashSet是基于LinkedHashMap实现的,所以LinkedHashSet的数据结构就是LinkedHashMap的数据结构。

2 四个关注点

关注点 结论
LinkedHashSet是否允许空 允许
LinkedHashSet是否允许重复数据 不允许(键不允许重复)
LinkedHashSet是否有序 有序
LinkedHashSet是否线程安全 非线程安全

3 LinkedHashSet源码解析

3.1 类的继承关系

public class LinkedHashSet<E>
    extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable

说明:LinkedHashSet继承自HashSet,也实现了一些接口。

3.2 类的属性

public class LinkedHashSet<E>
    extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {

    // 版本序列号
    private static final long serialVersionUID = -2851667679971038690L;
}

3.3 类的构造函数

LinkedHashSet会调用HashSet的父类构造函数,让其底层实现为LinkedHashMap,这样就很好的实现了LinkedHashSet所需要的功能。

1. LinkedHashSet(int initialCapacity, float loadFactor)型构造函数

public LinkedHashSet(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor, true);
}

2. LinkedHashSet(int initialCapacity)型构造函数。

public LinkedHashSet(int initialCapacity) {
        super(initialCapacity, .75f, true);
}

3. LinkedHashSet()型构造函数。

public LinkedHashSet() {
        super(16, .75f, true);
}

4. LinkedHashSet(Collection<? extends E> c)型构造函数。

public LinkedHashSet(Collection<? extends E> c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容