我讀到HashMap有一個支持數組,其中存儲條目(標記爲存儲區編號,初始大小爲16)。數組是有序的,我可以調用get(n)來獲取第n個元素的位置。那爲什麼HashMap是無序的並且沒有get(n)方法?HashMap有支持數組,然後爲什麼它是無序
4
A
回答
4
這取決於您對訂購意味着什麼的看法。
確實HashMaps
s在內部使用數組或具有固定排序的其他集合。然而,訂單有沒有與插入順序或類似的東西。這些元素是,例如,訂購的,它們的散列值的大小遞增,並且它們與元素本身的一些實際排序無關。
所以HashMap
小號確實有一些像get(n)
方法,如果你認爲n
作爲哈希值的關鍵元素的的。該方法被稱爲get(*key*)
,它首先計算給定鍵元素的散列值,然後通過使用get(*hash-value*)
來查看內部結構上的值。
這裏是一個圖像的快速搜索產量,顯示的HashSet
S中的結構:
注意HashSet
s爲還挺比HashMaps
一樣,他們使用相同的技術和相同的圖像應用。但不是插入一個元素,而是插入一個由鍵標識的容器,並且還包含一個值。
就像一個小概述。散列函數是一個函數,它給定一個對象使用它的屬性計算出一個小值,即散列值。計算通常可以快速完成,因此哈希值給定位置處的內部數組上的查找也很快。
爲了您的具體問題,爲的HashMap
你一般不感興趣,什麼元素專門躲在哈希值1
或2
等等,這就是爲什麼他們沒有包括這種方法的用戶。但是,如果您真的需要爲特殊應用程序這麼做,或者您總是可以嘗試使用Reflection來訪問您的HashMap
的內部,或者您也可以在提供此類方法的類中編寫一個小包裝。
2
A HashMap
分爲單獨的桶。桶最初由一個數組支持,但是如果桶變得太大,那麼它們會轉換爲基於散列碼分類的樹結構。僅僅這個事實就破壞了它可以保留廣告訂單的任何保證。
如果您想了解更多關於它是如何實現的,你可以看看my answer這個問題:HashMap Java 8 implementation
相關問題
- 1. 爲什麼Google Chrome仍然支持__proto__?
- 2. 無法獲得支持的接口方向數組,爲什麼?
- 3. Apache CXF是否支持HashMap?
- 4. 什麼是HashMap和ArrayList,它們對於什麼有用?
- 5. 是否ember.js仍然支持ObjectController?如果不是,什麼取代它?
- 6. Javascript支持超過1.5。爲什麼它還沒有?
- 7. 什麼是Android支持庫?
- 8. os.environ的類型是什麼?爲什麼它不支持視圖鍵方法
- 9. SOCKS Proxy,爲什麼大多數瀏覽器都支持它們?
- 10. 爲什麼Tomcat支持Hibernate?
- 11. 爲什麼PHP數組不支持ZEROFILL參數
- 12. 爲什麼數字不支持.dup?
- 13. 爲什麼python ECDSA不支持負數?
- 14. gcc爲什麼不支持裸函數?
- 15. 爲什麼它是不可能遞增,然後++
- 16. 什麼是視圖的默認大小,什麼它應該是爲了支持所有方向
- 17. 二維數組支持是什麼意思?
- 18. bash是否支持數組?
- 19. 爲什麼mxml不支持組件構造函數?
- 20. 爲什麼Visual Studio不支持數組大小的變量?
- 21. 爲什麼C++不支持可變長度數組?
- 22. 爲什麼iReport不斷添加不支持的標籤然後崩潰?
- 23. 爲什麼JSONObject無序?這背後的原因是什麼?
- 24. 堅持HashMap的最有效方法是什麼?
- 25. 爲什麼Rails(3 +)仍然不支持存儲過程?
- 26. 爲什麼HTML 5仍然支持演示元素?
- 27. 是pixelHeight仍然支持HTML5
- 28. 是Javascript支持的數組數組嗎?
- 29. 爲什麼HashMap自動排序字符類型的鍵,雖然是一個無序的集合?
- 30. 什麼是string array [] =「」;是什麼意思?爲什麼它有效?
「並沒有get(n)的方法」究竟如何做你期望'得到(N) 「工作/回報?Bucket可以容納許多具有* similar * hash屬性的元素(這裏可以說key'hashcode%16的結果相同的鍵將會進入同一個bucket)。無論如何,地圖是有序的,但不是我們可以依賴的方式,因爲它可以基於元素的數量進行更改(以更好地平衡桶中的元素)。 – Pshemo
就像註釋一樣,如果你想維護**插入順序**並且使用'HashSet',那麼你可能會發現類LinkedHashSet有用,它通過添加兩個指針** prev **和* * next到每個元素(一種稱爲*鏈接列表*的技術)。 – Zabuza
對於'HashMap'也是一樣,它們是一個名爲'LinkedHashMap'的類,它也是這樣做的。 – Zabuza