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在来

上一篇:集合源码分析05——LinkedHashSet源码分析


下一篇:LinkedHashSet介绍