关于hashmap的一点疑惑

ctlgq2017 2018-10-31 03:14:32
都知道hashmap数组默认长度是16,而且长度是2的幂,数组的长度和map本身的size有什么关系吗?
...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
stacksoverflow 2018-10-31
  • 打赏
  • 举报
回复
你说的16是capacity可以理解为容量。 size是里面的元素个数。 如果我的map里面有17个元素,那么capacity会自动扩容到比如32, size是17。 如果你只是使用HashMap的话,不需要纠结capacity,当没有这个就行了。 如果你需要研究HashMap的原理,请阅读算法导论的散列表,红黑树等。 对这个回答有疑问可以来我主页上提问(www.java123.vip)
sjlzcj 2018-10-31
  • 打赏
  • 举报
回复
tab[i = (n - 1) & hash
源码中的这句 看到了吗? 单纯就HashMap能存储的容量来说,其实跟table的长度是没什么绝对关系的 table 也就是 哈希表 的长度 是用来降低hash冲突的,HashMap在哈希冲突的时候,使用的链表发解决,也就是在同一个hash位置形成链表,当然现在也会根据数据量来改用红黑树,不过本质都是链表法解决hash冲突 假如你的哈希表只有一个位置,那所有的数据都哈希到同一个位置,那HashMap 就变成了 单链表或者红黑树了, 相对于原始的hash结构来说检索性能大大降低了
ctlgq2017 2018-10-31
  • 打赏
  • 举报
回复
如果我的map里面有17个元素,那么hashmap数组的长度是多少呢?

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧