HashMap的底层原理分析二
来源:互联网 发布:矩阵优化 编辑:程序博客网 时间:2024/06/10 00:32
上一篇文章把HashMap的一Put和Get做了一个简单的介绍了一下,这篇主要说一下关于HashMap的扩容以及以及原因.
HashMap的初始长度为16,没次扩容的时后,扩大的长度必须是2的幂.这里没有提到负载因子是因为我了解到负载因子可能引起HasnMap的死循环准备单独分析一下,在这里先说一下负载因子的默认大小为0.75,它是用来决定HasHMap的容量的临界值的.具体的东西在总结一下在写.
这里我查了一些质料,关于HashMap的长度为什么是16以及,为甚是2的幂
下面说的只要你学过数电绝对能看懂,不过我现在这里回忆简单的回忆一下数电的与、或运算
与运算 0与任何数都为0(0 & 0 为 0,0 & 1为0)
或运算 1或上任何数都为1(1 | 0 为 1 .1 | 1为 1)
在HasHMap中就用到了运算,在上一篇提到了一个确定Entry的索引,要用到Hash函数这个Hash函数为
index = HashCode(Key) & (length-1)
到这里差不多就把HashMap的默认长度的问题解决了.15的转化为二进制为1111
假设一个HashCode的值为0000 1110 0001 1101 1001 与15作与远算的话
0000 1110 0001 1101 1001
& 1111
结果为1001索引为7.但是如果长度为其他的长度.比如说是7 二进制1001
那么0000 1110 0001 1101 1001 以及0000 1110 0001 1101 1011 、0000 1110 0001 1101 1111的结果是相同的也就是索引的重复率会提高很多.如果使用16的话会使索引的分布均匀.
为什么2的幂,个问题就更简单了,因为如果是2的幂的话在减去一在经过与运算就会使索引均匀分布.
- HashMap的底层原理分析二
- HashMap的底层原理及源码分析
- HashMap的底层原理
- HashMap的底层原理
- HashMap的底层原理分析jdk1.8以前
- hashMap的底层实现原理
- 浅谈HashMap 的底层原理
- HashMap之entrySet( )底层实现原理分析
- 容器Map和HashMap底层原理分析
- HashMap底层实现原理的Java演示
- HashMap的实现原理和底层数据结构
- HashMap的实现原理和底层数据结构
- HashMap的实现原理和底层数据结构
- HashMap的实现原理和底层数据结构
- HashMap的实现原理和底层数据结构
- HashMap的实现原理和底层数据结构
- HashMap的实现原理和底层数据结构
- HashMap的实现原理和底层结构
- 菜鸟学习数据结构算法之路之快速排序
- ValueError: Only call `softmax_cross_entropy_with_logits` with named arguments (labels=..., logits=.
- 简述“自顶向下,逐步求精”——面向过程程序设计方法
- leetcode 659. Split Array into Consecutive Subsequences
- 移动端H5一些小坑(持续更新)
- HashMap的底层原理分析二
- 操作系统实验之处理机调度
- 数据结构--栈的基本操作
- Mysql| Mysql分组函数
- 如何避免内存泄漏?
- LeetCode 15. 3Sum
- ScrollView监听是否滑动到底部
- 自动化测试之页面元素组织
- 11.25日笔记