HashMap的底层结构:
- 在jdk1.7及以前,使用的是数组加链表,每个map键值对组成一个Entry对象,然后将这个Entry对象存入数组中,在数组中的位置根据key的hash值确定,如果发生hash碰撞,则在发生碰撞的位置生成链表,在链表的头部将新的Entry插入。
- 在jdk1.8及之后,在链表中添加数据时是在链表的末端进行添加的,如果在一个数组的位置的链表长度达到8及以上,那么这个位置的链表将转换为红黑树,但是反过来,当一个红黑树的节点数只有6个及以下,那么这颗红黑树将转换成链表结构。
HashMap的初始空间为16,每次扩容为上次空间的2倍,例如第一次扩容后的空间为32,第二次为64…