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

转载于:https://www.cnblogs.com/MWCloud/p/11379775.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值