1.LinkedHashSet介绍
LinkedHashSet是HashSet的子类,底层是一个LinkedHashMap,维护了一个数组 + 双向链表
和HashSet不同的是,双向链表可以维护元素的次序,这使得元素看起来是以插入顺序保存的
同样的,LinkedHashSet也不允许添加重复元素
2.LinkedHashSet使用实例
import java.util.LinkedHashSet; import java.util.Set; /** * LinkedHashSet */ public class LinkedHashSetText { @SuppressWarnings({"all"}) public static void main(String[] args) { Set linkedHashSet = new LinkedHashSet(); linkedHashSet.add("dahe"); linkedHashSet.add(521); linkedHashSet.add(521); System.out.println(linkedHashSet); // [dahe, 521] } }
3.LinkedHashSet源码分析
第一次添加元素的时候,table数组扩容到16:
public LinkedHashSet() { super(16, .75f, true); }
HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
再执行添加操作时,底层走的其实还是HashSet那一套
LinkedHashSet存在静态内部类Entry
里面维护了当前节点的next和prev,这使得链表可以变得有序起来