LinkedHashSet的说明

    1. 1.LinkedHashSetHashSet的子类
    2. 2.LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表
    3. 3.LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,
    4. 这使得元素看起来像是以插入顺序保存的
    5. 4.LinkedHashSet不允许添加重复元素
    1. 1.LinkedHashSet中维护了一个hash表和双向链表(LinkedHashSetheadtail
    2. 2.每一个结点有prenext属性,这样可以形成双向链表
    3. 3.在添加一个元素时,先求hash值,再求索引,确认元素在hashTable的位置,然后将添加的元素
    4. 加入到双向链表(如果已经存在,不添加【原则和hashSet一样】)
    5. tail.nest = newElement //简单指定
    6. newElement.pre = tail
    7. tail = newEmement;
    8. 4.这样的话,我们遍历LinkedHashSet也能确保插入顺序和遍历顺序一致
    1. 1.LinkedHashSet 加入顺序和取出元素/数据顺序一致
    2. 2.LinkedHashSet 底层维护的是一个LinkedHashMap(是HashMap的子类)
    3. 3.LinkedHashSet 底层结构(数组table + 双向链表)
    4. 4.添加第一次时,直接将数组table扩容到16,存放的结点类型是LinkedHashMap$Entry
    5. 5.数组是HashMap$Node[] 存放的元素/数据是LinkedHashMap$Entry类型
    6. static class Entry<K,V> extends HashMap.Node<K,V> {
    7. Entry<K,V> before, after;
    8. Entry(int hash, K key,V value,Node<K,V> next) {
    9. super(hash, key, value, next);
    10. }
    11. }