LinkedHashSet詳解
1. 說明
- LinkedHashSet是HashSet的子類
- LinkedHashSet底層是一個LinkedHashMap,底層維護了一個數組 + 雙向鏈表
- LinkedHashSet根據元素的hashCode值來決定元素的存儲位置,同時使用鏈表維護元素的次序,這使得元素看起來是以插入順序保存的
- LinkedHashSet不允許添加重復元素
2. 添加元素詳解
-
在LInkedHashSet中維護了一個hash表和雙向鏈表,LinkedHashSet中有head和tail,分別指向鏈表的頭和尾
-
每一個節點有before和after屬性,這樣可以形成雙向鏈表
-
在添加一個元素時,先求hash值,再求索引,確定該元素在table表中的位置,然后將添加的元素加入到雙向鏈表(如果該元素已經存在,則不添加)
tail.next = newElement
newElement.pre = tail
-
這樣在遍歷LinkedHashSet時也能確保插入順序和遍歷順序一致