结论:
1.在LinkedHashSet中维护了一个hash表和双向链表
2.每一个节点有before和after属性,这样可以形成双向链表
3.在添加一个元素时,先求hash值再求索引,确定该元素在table表的位置,然后将添加的元素加入到双向链表(如果存在则不添加[原则和HashSet一样])
//代码表示如下:
tail.next = newElement;
newElement.pre = tail;
tail = newElement;
4.这样的话,我们遍历LinkedHashSet也能确保插入顺序和遍历顺序一致
因为是LinkedHashSet是HashSet子类,所以底层机制是一样的