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