put
先看key-value的put操作:
1.1 putForNullKey,把key为null的put,放在table[0]上。
1.2 hash
1.3 indexFor,让hash值落在tableindex范围内,h& (length-1)运算等价于对length取模,也就是h%length,但是&比%具有更高的效率
1.4 addEntry
把新的实体放在table数组的某个位置的链表的第一个,如果size达到阈值threshold(capacity * loadFactor),要把table数组的长度加倍。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco} span.s1 {color: #951565}
1.5 resize,扩容,对table重新排序分布,产生newTable 的过程有点“copy-on-write”的意思;transfer在重新对数据项排序和分布。
2 从map中get数据:
2.1 getForNullKey
2.2
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}
Entity[] table是内部一级存储结构,Entity是一个内部类,也是一个“链表”:
2
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}