LinkedHashSet源码剖析

目录

成员变量

构造函数

添加/删除


成员变量


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

    private static final long serialVersionUID = -2851667679971038690L;

}

         LinkedHashSet继承HashSet,其中只有序列化ID不一样,这里其实看不出什么来。

构造函数

 /**
    使用指定的初始容量和负载因子构造一个新的空链接散列集。
    参数:
    initialCapacity – 链接散列集的初始容量
    loadFactor – 链接散列集的负载因子
    抛出:
    IllegalArgumentException – 如果初始容量小于零,或者负载因子为非正数
     */
    public LinkedHashSet(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor, true);
    }

    /**
    使用指定的初始容量和默认负载因子 (0.75) 构造一个新的空链接散列集。
    参数:
    initialCapacity – LinkedHashSet 的初始容量
    抛出:
    IllegalArgumentException – 如果初始容量小于零
     */
    public LinkedHashSet(int initialCapacity) {
        super(initialCapacity, .75f, true);
    }

    /**
		使用默认初始容量 (16) 和负载因子 (0.75) 构造一个新的空链接散列集。
     */
    public LinkedHashSet() {
        super(16, .75f, true);
    }

    /**
    使用与指定集合相同的元素构造一个新的链接散列集。 链接散列集的初始容量足以容纳指定集合中的元素和默认加载因子 (0.75)。
    参数:
    c - 其元素将被放入此集合的集合
    抛出:
    NullPointerException – 如果指定的集合为空
     */
    public LinkedHashSet(Collection<? extends E> c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);
    }

        这里注意到它是直接继承父类的构造方法,因为有三个参数,这里实际使用的是下面HashSet中的和这个构造方法。

 /**
    构造一个新的空链接哈希集。 (此包私有构造函数仅供 LinkedHashSet 使用。)后备 HashMap 实例是具有指定初始容量和指定负载因子的 LinkedHashMap。
    参数:
    initialCapacity – 哈希映射的初始容量
    loadFactor – 哈希映射的负载因子
    dummy – 忽略(将此构造函数与其他 int、float 构造函数区分开来。)
    抛出:
    IllegalArgumentException – 如果初始容量小于零,或者负载因子为非正数
     */
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

        这里就容易理解了,底层是一个LinkedHashMap。

添加/删除

        添加add和删除remove操作都复用了父类HashSet的方法,详情可以看 HashSet源码剖析,这里只是底层map为LinkedHashMap。因为LinkedHashMap里面维护了一个双向链表保持着我们需要的顺序(插入顺序),所以在此LinkedHashSet运用迭代器遍历时也是有序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值