Set集合学习结束

LinkedHashSet是HashSet的子类

LinkedHashSet的底层是LinkedHashMap,而LinkedHashMap是HashMap的一个实现类。

底层维护是一个数组加双向链表。LinkedHashMap它是根据hashcode值来决定元素的存储位置,由于使用了双向链表,所以看起来像元素插入的顺序保存的。所以插入和取出的元素位置一致。

同样由于LinkedHashSet是继承Set集合,所以不允许添加重复的元素。

实际上LinkedHashSet和HashSet的实现原理类似,关键点就是双向链表。

LinkedHashMap中,是一个数组(table)加双向链表.第一次初始化为16个。HashMap以前放着是Node节点,现在LinkedHashMap中放着的是节点(数据)是LinkedHashMap$Entry.tables数组类型是LinkedHashMap$Node.

实际上他们的关系就是一种继承或者是实现。before, after就是链接双向链表的

下面代码的实现是内部内实现的,而且是静态内部内。

static class Entry<K,V> extends HashMap.Node<K,V> {
    Entry<K,V> before, after;
    Entry(int hash, K key, V value, Node<K,V> next) {
        super(hash, key, value, next);
    }
}

after指向下一个元素,下一个元素的before指向上一个元素,形成双向链表。head和tail分别是头节点和尾节点

TreeSet 等学TreeMap在来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值