- 初始容量(4种构造方式),负载因子(默认0.75)
- 由table数组和Entry链表组合而成
- 当key为null,调用putForNullKey方法,所以可以key为null(放在table[0]),取getForNullKey
- 底层数组长度总是2的n次方,使得数据在table数组中分布较均匀,查询速度也较快。
- put()时,判断是否为null,计算hash值,确定在table数组中位置(思想是取模,实现用的 与),遍历Entry链表,能找到(hash值相等,key相同或者调用equals为true)就修改这个Entry,返回OldValue,否则就addEntry(),返回null
- addEntry(),新加的Entry在链表头,会增加HashMap的size属性(即增加链表长度仍然算增加元素个数,有可能扩容)
- get(),判断key是否为null,计算hash值,确定在table数组中位置。遍历Entry链表,能找到返回value,否则null
源码解析见:
点击打开链接