ArrayList在动态增长的时分,是不是需要重新构造内存和拷贝元素

ArrayList在动态增长的时候,是不是需要重新构造内存和拷贝元素?
有一个问题,如果ArrayList是顺序存储的,那么动态增加它的大小,岂不是相当于分配一块更大的存储并且把所有的元素拷贝过去?

这样也太昂贵了吧

------解决方案--------------------
是的,ArrayList内部机制实际上使用的Object数组,当容量不够的时候就创建更大的数组将老数组拷贝过去

但是昂贵?这恐怕也是最好的办法了吧,ArrayList不是链表,用数组作成的List也只能如此了吧。

JVM会自动进行垃圾收集老数组,也OK了。
------解决方案--------------------
探讨
有一个问题,如果ArrayList是顺序存储的,那么动态增加它的大小,岂不是相当于分配一块更大的存储并且把所有的元素拷贝过去?

这样也太昂贵了吧

------解决方案--------------------
楼主说的没错,如果频繁为其扩容,代价是有点高了。
所以虽然提供了自动扩容的方法,在实际使用中还是事先预估下它的容量,设置一个比较合理的容量,这样会减少些开销。
但也别害怕,容量没那么大的话,其速度还是很快的。
另外扩容一次其容量为原来的1.5倍,有可能会造成空间的浪费,这时可使用trimToSize()方法来将容量调整为列表的当前实际大小(把容量收缩一下)
------解决方案--------------------
探讨

楼主说的没错,如果频繁为其扩容,代价是有点高了。
所以虽然提供了自动扩容的方法,在实际使用中还是事先预估下它的容量,设置一个比较合理的容量,这样会减少些开销。
但也别害怕,容量没那么大的话,其速度还是很快的。
另外扩容一次其容量为原来的1.5倍,有可能会造成空间的浪费,这时可使用trimToSize()方法来将容量调整为列表的当前实际大小(把容量收缩一下)

------解决方案--------------------
预估下 指定大小
要不就不要用它 
频繁插入就用链表
------解决方案--------------------
无聊下,大家随便看看。

探讨
另外扩容一次其容量为原来的1.5倍+1;