ArrayList的数据结构主体是Object[]数组,数组对象在内存的位置是成块成块的。
1、对数组进行非尾部修改,会引发System.arrayCopy()行为。这就需要对后半部要移动的对象进行内存位置的调整,这是性能瓶颈最关键的地方之一;
2、对数组进行非尾部修改,如果要增加数组长度,倘若要增加的长度对于原来的数组来说,在内存地址空间上“触手可及”,那么扩容是比较方便的;但若不是,那么调整成本就会明显增加;
3、数组复制,这一行为对内存的占用应该会翻倍,不过这要看java的native方法的实现。