正如我研究過HashSet類,它使用填充比率的概念,它表示如果HashSet如果填充到此限制將創建更大的HashSet和複製值到它。爲什麼我們不讓HashSet充滿對象,然後創建一個新的HashSet?爲什麼要爲HashSet派生一個新概念?HashSet中填充比率或負載因子概念的需求
2
A
回答
5
ArrayList和Vector都通過位置索引訪問,所以沒有衝突,訪問總是O(1)。
基於哈希的數據結構被哈希值訪問,哈希值可能會碰撞並降級爲訪問第二級「溢出」數據結構(列表或樹)。如果你沒有這種衝突,訪問是O(1),但是如果你有很多衝突,它可能會更糟糕。你可以通過分配更多的內存來控制這一點(以便有更多的桶和希望更少的衝突)。
因此,不需要將ArrayList增長到超過需要存儲所有元素的容量,但在HashSet的情況下「浪費」一點(或很多)確實有意義。該參數被公開以允許程序員選擇對於其應用最適合的東西。
0
正如Jonny Henly所描述的那樣。這是因爲存儲數據的方式。
ArrayList是線性數據結構,而HashSet不是。在HashSet中,數據基於哈希碼存儲在底層數組中。在某種程度上,HashSet的性能與多少個桶被填充以及這些桶之間的數據分配有多好有關。一旦這種數據分佈超出了某個水平(稱爲加載因子),則重新哈希完成。
0
HashSet主要用於確保在恆定時間內執行基本操作(例如添加,讀取,修改和刪除),無論存儲在HashSet中的條目數量如何。
雖然設計良好的哈希函數可以實現這一點,但設計一個可能需要時間。因此,如果性能是應用程序的關鍵要求,那麼我們可以使用負載因數來確保操作在不變的時間內執行。我認爲我們可以將這兩者都稱爲冗餘(負載因子和散列函數)。
我同意這可能不是一個完美的解釋,但我希望它確實爲這個問題帶來了一些清晰。
相關問題
- 1. HashSet的負載因數
- 2. 自動填充概念
- 3. 重載多態概念或?
- 4. 子域概念
- 5. 頻率變換:Fundametal概念
- 6. 填充向量與概率計算
- 7. C中的叉子概念#
- 8. JavaScript加載概念
- 9. 單場比賽概率或累積概率
- 10. 比較遊戲概念
- 11. Java的重載的概念
- 12. MySql索引填充因子?
- 13. 填充因子和索引
- 14. 填充因子SQL Server
- 15. 爲什麼HashSet構造函數0.75的默認填充率?
- 16. 填充因子 - SQL Server,是否有方法在數據庫,服務器或模式中設置填充因子?
- 17. 內部類概念中最終變量的需求
- 18. 概念名稱需要
- 19. 下載管理器概念
- 20. 使用不同比例作爲基於因子的填充
- 21. Julia對R因子概念的解決方案是什麼?
- 22. 紅寶石概念 - 收益率
- 23. sqlite概念到coredata的概念?
- 24. Solr:子查詢概念
- 25. Winforms中的主子頁面概念
- 26. Grails中引擎或可掛載引擎的概念?
- 27. 填充率2008
- 28. 概念
- 29. 概念
- 30. 概念
http://stackoverflow.com/questions/3564638/hashset-load-factor?rq=1這有幫助嗎? – nullpointer
'ArrayList'是否可以包含重複項? ArrayList是否以任何方式使用哈希碼?這不是一個新概念 - 考慮「HashMap」。 –
@nullpointer不,它沒有幫助 –