随笔分类 - hashMap原理
摘要:恢复内容开始 首先抛出一个问题: 为什么hashMap一般使用String作为key? 这是我学习前辈们的博文时看到的一个问题,觉着很有意思,所以记录下来. 原因1: 我当时的第一反应是:为什么不用String,没有哪个类型的元素辨识度比String更好吧? 当然,使用String作为key并不仅仅
阅读全文
摘要:恢复内容开始 在上文中讲到了putval这个方法,这里继续: 红黑树后面章节会单独拿出来讲,这里先忽略. 这里需要留意标红的两个钩子函数. 源码如下: 这个三个方法的实现是在子类LinkedHashMap中,顾名思义,三个函数的作用分别是:节点访问后,节点插入后,节点移除后 做一些操作. 我们从上面
阅读全文
摘要:一.初始化: hashMap有四种初始化方式: 以下,对扩容方法resize进行补充描述: 通过观测可以发现,我们使用的是2次幂的扩展(长度扩展为原来的2倍),所以,元素的位置要么是原位置,要么是原位置再移动2次幂的位置。其中 n代表 数组长度(容量)。见下图: 因此,元素再重新计算hash之后,因
阅读全文
摘要:hashMap中,为了使元素在数组中尽量均匀的分布,所以使用取模的算法来决定元素的位置.如下: 方法一是我当前使用jdk版本的源码, 方法二是在网上查到的低版本的源码, 首先确认:当length总是2的n次方时, h & (length - 1) 等价于 hash对length取模 ,但是&比%具有
阅读全文
摘要:HashMap 继承自 接口Map. 这个实现类提供了接口Map所有的方法,并且允许空的value和空的key.HashMap这个类 和类HashTable 类似,除了HashMap是异步的并且允许null值.HashMap不保证map中元素的顺序,尤其,它不保证元素的顺序始终保持不变. HashM
阅读全文

浙公网安备 33010602011771号