一、LinkedHashSet 概述
(1)LinkedHashSet 是 HashSet 的子类
(2)LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
(3)LinkedHashSet作为HashSet的子类,在添加数据的同时,每个数据还维护了两个引用,记录此数据前一个数据和后一个数据。
(4)LinkedHashSet插入性能略低于 HashSet, 但在迭代访问 Set 里的全部元素时有很好的性能,对于频繁的遍历操作,LinkedHashSet效率高于HashSet
(5)LinkedHashSet 不允许集合元素重复。
二、LinkedHashSet 结构
1、LinkedHashSet 声明
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable
2、LinkedHashSet 结构
3、LinkedHashSet 方法
三、LinkedHashSet 创建
1、构造器
LinkedHashSet 提供了四种构造器:
1 public LinkedHashSet() {
2 super(16, .75f, true);
3 }
4 public LinkedHashSet(int initialCapacity) {
5 super(initialCapacity, .75f, true);
6 }
7 public LinkedHashSet(int initialCapacity, float loadFactor) {
8 super(initialCapacity, loadFactor, true);
9 }
10 public LinkedHashSet(Collection<? extends E> c) {
11 super(Math.max(2*c.size(), 11), .75f, true);
12 addAll(c);
13 }
可以发现都是调用了父类的一个构造器:
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
在此就可以发现 LinkedHashSet 本质上是使用 LinkedHashMap 来存储和管理数据的。