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倍擴容)