1. LinkedHashSe类 基本介绍
(1)LinkedHashSet是HashSet的子类。
(2)底层是LinkedHashMap,LinkedHashMap的底层是HashMap,底层维护了一个数组+双向链表。
(3)LinkedHashSet根据元素的 hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的(即 添加顺序和取出顺序一致)。
(4)LinkedHashSet不允许添重复元素。
2. LinkedHashSet 底层机制分析
(1)LinkedHashSet加入顺序和取出元素/数据的顺序一致。
(2)LinkedHashSet底层维护的是LinkedHashMap(是HashMap的子类)。
(3)LinkedHashSet底层结构是 数组table+双向链表。
(4)添加第一次时,直接将数组table扩容到 16,存放的结点类型是LinkedHashMap$Entry
(5)数组是HashMap$Node[],存放的元素/数据是LinkedHashMap$Entry类型。
Entry底层的源码为:
//Entry继承了HashMap,继承关系是在内部类完成
static class Entry<K,V> extends HashMap.Node<K,V> {
Entry<K,V> before, after;
Entry(int hash, K key, V value, NodecK,V> next) {
super(hash,key, value, next);
}
}
(6)LinkedHashSet底层添加元素的机制 就是 使用HashSet的底层源码,添加判断的机制都一样。