JDK1.7:开辟一个更大的数组,并通过一个双层循环(有链表节点需要第二层循环,链表插入是头插法,因此拷贝过去后整个新链表会翻转)把原数组的节点完整拷贝过去。
多线程下可能会导致链表成环,出现while死循环。根本原因在于使用头插法。
JDK1.8:同1.7,区别在于链表插入使用了尾插法,且要拷贝的节点正好是一棵红黑树的根,那么要重新计算红黑树下每个节点对应在新数组下的索引下标位置(数组容量不同,下标不一定相同)。
并发执行put操作时,如果线程A未插入时就挂起,则当A重新获得时间片后直接插入,会出现数据覆盖情况。
← 异步任务 ConcurrentHashMap→