從HashMap中檢索條目是否真的隨機化?或者是否依賴於其中條目被散列的桶,然後以某種預定義的順序訪問這些桶?或內部發生的其他任何類型的訂單?HashMap中元素的檢索順序是否真的隨機化?
回答
應答b - 這取決於其中的條目被散列桶,然後將這些桶是在一些預定義的次序
訪問,當你調用一個HashMap
的get
方法非空密鑰將會怎麼樣:
您的密鑰的
hashCode()
方法被調用。該散列的散列桶是通過簡單地將散列與散列數-1進行比較而得到的,因爲該實現可以確保散列數總是2的冪。一個由
HashMap.Entry
對象組成的java數組,可以將生成的整數用作普通數組索引。這是O(1)複雜性來自的地方。存儲桶中的條目(鏈接列表)被迭代,直到找到散列和鍵匹配所需的條目。這是O(1)複雜性開始惡化到O(n)的最壞情況的地方。
所以你可以看到,能夠有效利用HashMap
會盡量減少在一個水桶一起結束的條目數。在這方面,所有重要的是散列碼中位從0到N-1的分佈,其中N是用於計算桶數的2的冪。您的散列碼中超過該限制的所有位都會被屏蔽掉,並且只能在存儲區列表的迭代過程中再次使用。
對於你的第三點:我一直認爲'equals'方法被調用來解決衝突,即使你沒有明確地說出它也是這種情況(或者你的意思可能是「你要」) ? – Dici 2014-09-24 15:24:16
@Dici,最終會.equals()將被調用,但實現首先嚐試通過首先對關鍵字執行引用相等性檢查來避免可能較慢的調用,並且它只會在先前計算出的hash匹配緩存的條目散列。 – 2014-09-24 15:47:49
- 1. 檢索隨機元素的ArrayList中
- 2. 爲什麼HashSet中的元素是隨機順序的?
- 3. 隨機化行的順序
- 4. IEnumerator的隨機化順序
- 5. 檢測元素是否真的可見
- 6. 修訂是否真的是隨機的
- 7. 隨機化數組中的元素?
- 8. XML是否關心元素的順序?
- 9. xmlns元素的順序是否重要
- 10. 隨機順序和maxOccurs中的元素> 1
- 11. 散列表元素是無序的,我想以與插入順序相同的順序檢索元素
- 12. 序列模式元素是否保證子元素的順序?
- 13. 隨機化數組元素
- 14. 如何隨機化圖像的順序?
- 15. JavaScript對象的元素是否按特定順序初始化?
- 16. 在C++中檢索std :: map的隨機密鑰元素
- 17. Hashmap是否使用隨機存取?
- 18. 數字是隨機順序
- 19. jQuery序列化順序似乎是隨機的
- 20. 生成元素隨機順序的算法
- 21. 遍歷隨機順序的所有元素一次
- 22. JQuery Ajax:動態div元素的隨機順序
- 23. 如何「檢查」函數是否真的給出隨機結果?
- 24. 使用hashmap存儲輸入是否會使算法隨機化?
- 25. 可能從MongoDB中檢索多個隨機,非順序文檔?
- 26. 隨機化我的數組元素
- 27. 以隨機順序從集合中獲取所有元素
- 28. java中的Math.random()方法是否真的是隨機的?
- 29. 在java中隨機化一組元素
- 30. 向量元素是否保證順序?
你的答案在這裏,如果你想閱讀... http://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html – StackFlowed 2014-09-24 14:50:14
它不叫'RandomMap'。 – 2014-09-24 14:50:31
另請參閱:http://stackoverflow.com/questions/2144776/order-of-values-retrieved-from-a-hashmap – assylias 2014-09-24 14:52:04