HashMap底層為什么一定用數組


HashMap源碼數據結構:

Entry[] table = new Entry[capacity];

其中,Entry就是一個鏈表節點。如果將數組替換成LinkedList是否可行?如下:

List<Entry> table = new LinkedList<Entry>();

將數組替換成LinkedList是可以的,但是HashMap選用數組的原因有以下兩點:

1)數組效率高

在HashMap中,定位桶的位置是利用元素的key的哈希值對數組長度取模得到。此時,我們已得到桶的位置。顯然數組的查找效率比LinkedList大。

2)可自定義擴容機制

采用基本數組結構,擴容機制可以自己定義,HashMap中數組擴容剛好是2的次冪,在做取模運算的效率高。

(如:ArrayList底層也是數組,但是擴容機制是1.5倍擴容)

 

參考:https://zhuanlan.zhihu.com/p/76735726


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM