HashMap插入和扩容机制
- put
- 判断插入的key是否有hash冲突
- e != null hash冲突进行值覆盖
- resize 扩容 大于初始容量*负载因子时触发
- 拷贝数组
rehash 把数据放回table, 如果存在链表(e.next!= null), 遍历链表重新在尾结点插入
rehash 并发安全问题出在:newTab[e.hash & (newCap - 1)] = e; 如果计算出来的index刚好是环形链表的下标是,成环,导致死循环
解决方法: 初始化时尽量指定好要插入的最大容量,避免扩容
- 拷贝数组