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

最新文章

  1. C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)
  2. 用VSCode写python的正确姿势
  3. ASCII与UNICODE的区别
  4. org.springframework.web.servlet.view.InternalResourceViewResolver
  5. TaskTracker获取并执行map或reduce任务的过程1
  6. 5个可用提高Godaddy主机速度的第三方CDN加速服务商
  7. WEBROOT根目录 &lt;%=request.getContextPath()%&gt;
  8. BZOJ 3456: 城市规划 [多项式求逆元 组合数学 | 生成函数 多项式求ln]
  9. 【bzoj4445 scoi2015】小凸想跑步
  10. firebug定位工具很强大
  11. octave基本指令5
  12. Django 利用管理器实现文章归档
  13. 案例:通过shell脚本实现mysql数据备份与清理
  14. C#连接操作MySQL数据库详细步骤 帮助类等(二次改进版)
  15. luoguP4036 [JSOI2008]火星人 平衡树+hash
  16. ubuntu 16.04通过源码方式安装nginx
  17. 第二次c++作业
  18. 详解 Cookie 和 Session 关系和区别
  19. 解决国内gem不能用的问题
  20. makefile的选项LDFLAGS和LIBS的区别

热门文章

  1. 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析
  2. pt-config-diff的使用记录
  3. 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用
  4. Java面试之框架篇(9)
  5. 10. ClustrixDB 故障恢复管理
  6. C++中string常用函数用法总结
  7. 激活navicat premium12
  8. Xdebug bad Zend API Version Number
  9. IDEA 中常用快捷键的使用
  10. 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.