
如图,是所有要讲解的内容,当你掌握图中思维导图,你对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碰撞
知是行之始,行是知之成
HashMap是一种基于哈希表的数据结构,用于快速查找Key-Value对。它在JDK1.7及之前采用数组+链表,1.8后引入红黑树,优化了冲突处理。HashMap的初始容量为16,且容量必须为2的幂,以保证索引值在范围内并减少哈希碰撞。其容量会根据实际需求自动调整,但最大不超过2的30次方。
706

被折叠的 条评论
为什么被折叠?



