hashMap实现原理
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、HashMap概述: 1)HashMap实现了Map接口,与HashTable等效,除了HashMap是线程不同步的,且允许空value,空key;且不保证映射的顺序,特别是它不保证顺序恒久不变 2)该实现提供了常量时间性能的基本操作,若注重迭代性能,则不要把初始化容量设置过高,(或加载因子过低),迭代时间与HashMap实例的“容量”(桶的数量)加key-value成正比 3)HashMap实例的两个参数影响其性能,initial capacity(初始化容量),load Factor(加载因子) 容量指的是:Hash表中桶的数量 加载因子:决定了Hash表的容量何时自动增长 当Entries的数量超过加载因子*当前容量,将会rehashed(内部数据结构将会被重构),容量扩展为2倍 4)作为一般规则,默认加载因子大小为0.75,提供较高的值减少了空间上的消耗,但增加了时间成本(主要体现在get和put上,设置其初始化容量时需要考虑何时的entries和load factor,以减少rehash次数) 5)该实现是不同步的,如果多线程并发访问hashMap,且至少一个线程修改map的结构,它必须从外部上锁(修改结构指的是任何添加和删除映射,仅仅修改key锁关联的value不属于结构修改),上锁方式: