HashMap底层为什么一定用数组
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倍扩容)
我只是偶尔安静下来,对过去的种种思忖一番。那些曾经的旧时光里即便有过天真愚钝,也不值得谴责。毕竟,往后的日子,还很长。不断鼓励自己,
天一亮,又是崭新的起点,又是未知的征程(上校9)
逆水行舟,不进,则退!