专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

LinkedHashSet 源码分析

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

    private static final long serialVersionUID = -2851667679971038690L;

    /**
     * 调用了 HashSet 的构造方法,出入了初始化容量和装载因子,底层实现是 LinkedHashMap
     *
     * @param initialCapacity
     * @param loadFactor
     */
    public LinkedHashSet(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor, true);
    }

    /**
     * 传入指定容量和默认的装载因子去创建 LinkedHashMap
     *
     * @param initialCapacity
     */
    public LinkedHashSet(int initialCapacity) {
        super(initialCapacity, .75f, true);
    }

    /**
     * 使用默认的容量和装载因子创建 LinkedHashMap
     */
    public LinkedHashSet() {
        super(16, .75f, true);
    }

    /**
     * 根据集合创建 LinkedHashMap 默认容量为 11 或者为 2 倍集合长度的数量
     *
     * @param c
     */
    public LinkedHashSet(Collection<? extends E> c) {
        super(Math.max(2 * c.size(), 11), .75f, true);
        // 将数据一个一个的放入 LinkedHashMap
        addAll(c);
    }

    /**
     * 可分割的迭代器,主要用于并发时并行迭代使用
     *
     * @return
     */
    @Override
    public Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, Spliterator.DISTINCT | Spliterator.ORDERED);
    }
}

总结

  • LinkedHashSet 底层使用 LinkedHashMap 来存储元素
  • 不同于 HashSet 的地方在
    • 根据集合创建的时候,HashSet 指定的容量大小是 *1.75 倍,而 LinkedHashSet 是 2 倍
    • 根据集合创建的时候,HashSet 默认是 16 而 LinkedHashSet 是 11
    • HashSet 底层实现是 HashMap,LinkedHashSet 底层实现是 LinkedHashMap
    • HashSet 是无序的,LinkedHashSet 是根据插入值的顺序排序的,详情请看 LinkedHashMap 源码

文章永久链接:https://tech.souyunku.com/26096

未经允许不得转载:搜云库技术团队 » LinkedHashSet 源码分析

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们