111111

1. HashMap什么时候发生线程安全
当多线程的情况下,可能产生条件竞争。当重新调整HashMap大小的时候,确实存在条件竞争,如果两个线程都发现HashMap需要重新调整大小了,它们会同时试着调整大小。在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的数组位置的时候,HashMap并不会将元素放在LinkedList的尾部,而是放在头部,这是为了避免尾部遍历(tail traversing)。如果条件竞争发生了,那么就死循环了

2. ArrayList扩容

int newCapacity = oldCapacity + (oldCapacity >> 1);  //原数据

计算原数据*1.5长度和 原数据+1/N(新数据)长度进行对比,谁大则用谁的,然后调用

Arrays.copyOf(elementData, newCapacity);

底层调用

System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));

新那一个数组,将原数组复制进去并返回

原文地址:https://www.cnblogs.com/yifanSJ/p/12566460.html