JAVA集合系列——LinkedHashSet实现原理
LinkedHashSet实现原理
特点
- Set接口实现,HashSet的子类
- 允许null值
- 元素不重复
- 迭代有序(插入顺序或访问顺序)
- 非线程安全
数据结构和初始化
LinkedHashSet的源码非常的简单,如下就是所有的源码,从代码中可以看出,都是构造函数,并且都是调用了父类HashSet的构造函数HashSet(int initialCapacity, float loadFactor, boolean dummy),还记得这个HashSet的构造方法吗?它会初始化一个LinkedHashMap用来保存元素,对的,LinkedHashMap底层就是使用LinkedHashMap来保存元素的,所有LinkedHashSet也是哈希表和双重链表的结合体,所有的元素保存到LinkedHashMap的key上,value为默认常量,所以是唯一的。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public class LinkedHashSet<E> extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
private static final long serialVersionUID = -2851667679971038690L;
//指定初始容量和加载因子
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
//指定初始容量,加载因子默认为0.75
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
//默认构造函数
public LinkedHashSet() {
super(16, .75f, true);
}
//列表元素初始化
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
}
相关
像更好的了解LinkedHashSet,先了解下LinkedHashMap和HashSet是非常必要的:LinkedhashMap实现原理,HashSet实现原理。