HashMap底层为什么一定用数组
2024-08-28 21:46:19
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
最新文章
- C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)
- 用VSCode写python的正确姿势
- ASCII与UNICODE的区别
- org.springframework.web.servlet.view.InternalResourceViewResolver
- TaskTracker获取并执行map或reduce任务的过程1
- 5个可用提高Godaddy主机速度的第三方CDN加速服务商
- WEBROOT根目录 <;%=request.getContextPath()%>;
- BZOJ 3456: 城市规划 [多项式求逆元 组合数学 | 生成函数 多项式求ln]
- 【bzoj4445 scoi2015】小凸想跑步
- firebug定位工具很强大
- octave基本指令5
- Django 利用管理器实现文章归档
- 案例:通过shell脚本实现mysql数据备份与清理
- C#连接操作MySQL数据库详细步骤 帮助类等(二次改进版)
- luoguP4036 [JSOI2008]火星人 平衡树+hash
- ubuntu 16.04通过源码方式安装nginx
- 第二次c++作业
- 详解 Cookie 和 Session 关系和区别
- 解决国内gem不能用的问题
- makefile的选项LDFLAGS和LIBS的区别
热门文章
- 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析
- pt-config-diff的使用记录
- 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用
- Java面试之框架篇(9)
- 10. ClustrixDB 故障恢复管理
- C++中string常用函数用法总结
- 激活navicat premium12
- Xdebug bad Zend API Version Number
- IDEA 中常用快捷键的使用
- Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.