簡體   English   中英

在Hashset中迭代如何工作?

[英]How does iteration work in Hashset?

我只是偶然發現了有關java.util.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進行排序,因此迭代器可能會遍歷所有存儲桶,並依次瀏覽每個存儲桶的內容。 這意味着,如果添加更多項目,以便重新平衡存儲桶,則順序可以更改。

例如,如果你有123 ,你遍歷你可能會得到132 此外,如果您以后添加4 ,你可以再拿到4231或任何其他命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM