HashMap,ConcurrentHashMap(JDK1.7,JDK1.8)原理解析

JDK1.7版本HashMap原理解析(数组+链表)

基本的成员变量 

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //初始容量,默认16,2^4
static final int MAXIMUM_CAPACITY = 1 << 30;        //最大初始量,2^30
static final float DEFAULT_LOAD_FACTOR = 0.75f;     //负载因子,默认0.75,越小,hash冲突机率越低
static final Entry<?,?>[] EMPTY_TABLE = {};         //初始化一个Entry空数组
transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE; //将初始化好的空数组赋值给table,table数组是HashMap实际存储数据的地方,并不在EMPTY_TABLE数组中
transient int size;                                 //table存储key-value的总数
int threshold;                             //临界值(HashMap 实际能存储的大小),公式为(threshold = capacit*loadFactor)
final float loadFactor;                     //负载因子
transient int modCount;                     //HashMap的结构被修改的次数
static final int ALTERNATIVE_HASHING_THRESHOLD_DEFAULT = Integer.MAX_VALUE;

HashMap初始化:

解析put方法:按照这五步进行解析put方法

1、inflateTable(threshold): 如果table引用指向成员变量EMPTY_TABLE,那么初始化HashMap(设置容量、临界值,新的Entry数组引用)

例子:

Map map = new HashMap(10);

map.put("key","value")

在方法中 roundUpToPowerOf2(9),Integer.highestOneBit((10-1)<<1)

8<<1 -&g

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值