千锋教育Java入门全套视频教程(java核心技术,适合java零基础,Java

hashmap原理分析:
内部结构为一个数组还有一个链表。其中数组用来作为分类桶,即不同的hash值会映射到某个相应桶里,然后在桶里寻找是否有hash值相同并且key相同的冲突对象,然后进行替换或者加入到链表末尾。事实上当链表长度达到一定值时,会进行红黑树化。接下来进行细节说明。
hashmap要求数组容量为2的n次方,当用户在构造函数中所写入的值不满足时,会扩大为满足条件的最小值,用户指定时默认为16。用户还可以指定阈值因子,默认0.75,该因子乘以容量得到阈值,当总存入的节点达到阈值时会将容量扩大一倍。
对象的hash值映射到桶里的算法是先hash=hash^(hash>>>16);然后hash值&上(数组容量-1),得到的值便是对于与数组上的位置。
当一个链表上的长度达到9时,会在数组容量大于64时将该链表转化为红黑树,否则进行容量扩充一倍。