LinkedHashSet的全面说明
- LinkedHashSet是HashSet的子类
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
2. LinkedHashSet底层是一个LinkdeHashMap,底层维护了一个 数组+双向链表
3. LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序(图),这使得元素看起来是以插入顺序保存的。
4. LinkedHashSet不允许添加重复元素
源码解读:
- LinkedHashSet加入顺序和取出顺序一致
- LinkedHashSet底层维护的是一个LinkedHashMap(是HashMap的子类)
- LinkedHashSet底层结构(数组table+双向链表)
- 添加第一次时,直接将数组table扩容到16,存放的节点类型是LinkedHashMap$Entry
- 数组是HashMap$Node[] 存放的元素是 LinkedHashMap$Entry 类型
继承关系是在内部类完成
Entry是LinkedHashMap的内部类
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);
}
}