码迷,mamicode.com
首页 > 编程语言 > 详细

HashMap底层为什么一定用数组

时间:2021-05-24 16:58:48      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:lan   list   img   idt   源码   height   元素   运算   zoom   

 

技术图片

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

HashMap底层为什么一定用数组

标签:lan   list   img   idt   源码   height   元素   运算   zoom   

原文地址:https://www.cnblogs.com/lixiaochong/p/14787999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!