[英]How does iteration work in Hashset?
HashSet
正在使用N個存儲桶,並根據其哈希碼將元素存儲在這些存儲桶中的一個中,以加快搜索速度:當您搜索元素時,集合會計算該元素的哈希以知道需要搜索哪個存儲桶,然后檢查如果該存儲桶包含此元素。 由於該集合不需要檢查其他N-1個存儲桶,因此搜索速度提高了N倍。
對於少量元素,存儲桶的數量可以很少。 但是隨着更多元素的到達,存儲桶將開始包含更多元素,這意味着搜索將變慢。 為了解決此問題,該集合將需要添加更多的存儲桶,並重新排列其元素以使用新的存儲桶。
現在,當我們遍歷HashSet
我們將從第一個存儲桶中的元素開始,然后從第二個存儲桶中的元素開始,依此類推。 您會看到僅使用存儲桶的Set
不能保證元素的順序相同,因為存儲桶可以在迭代之間改變。
這基本上意味着HashSet
沒有順序。 然后,您不應該依賴代碼中的值順序。
如果您的集合包含值{2, 1, 3}
2,1,3 {2, 1, 3}
(插入順序),則不能保證對其進行迭代將返回{2, 1, 3}
2,1,3 {2, 1, 3}
或{1, 2, 3}
。
由於未對HashSet
進行排序,因此迭代器可能會遍歷所有存儲桶,並依次瀏覽每個存儲桶的內容。 這意味着,如果添加更多項目,以便重新平衡存儲桶,則順序可以更改。
例如,如果你有1
, 2
, 3
,你遍歷你可能會得到1
, 3
, 2
。 此外,如果您以后添加4
,你可以再拿到4
, 2
, 3
, 1
或任何其他命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.