如图,是所有要讲解的内容,当你掌握图中思维导图,你对HashMap掌握的也就差不多了,今天先讲解前面三个部分。
1.什么是Hash?Hash表?Hashcode?
-
Hash,一般称作散列或者哈希,是把任意长度的输入通过散列算法变成固定长度的输出。
-
Hash表,一般叫散列表或者哈希表,是根据关键码值(Key,Value)而直接进行访问的数据结构。也就是说,他通过关键码值映射到表中一个位置来访问记录,已加快查找的速度。‘
-
HashCode,一般叫做哈希码,并不是完全唯一的,对象相同,哈希码一定相同,但是哈希码相同,对象不一定相同。
2.HashMap的数据结构?
- jdk1.7以及之前:数组加链表
- jdk1.8以及之后:数组加(链表或者红黑树)
3.HashMap容量?
HashMap默认容量大小为16,上限是2的30次方,当你指定容量大小的时候,如果超过最大值,会默认赋值最大值,否则会取大于等于你当前值最小的2的次方值。
提问:为什么HashMap内部大小要设置2的次方?
- &运算速度速度比%快
- 能保证索引值在HashMap容量范围内
- (size - 1)& hash值是分布均匀的,可以减少hash碰撞
知是行之始,行是知之成