ArrayList在动态增长的时候,是不是需要重新构造内存和拷贝元素?
有一个问题,如果ArrayList是顺序存储的,那么动态增加它的大小,岂不是相当于分配一块更大的存储并且把所有的元素拷贝过去?
这样也太昂贵了吧
------解决方案--------------------是的,ArrayList内部机制实际上使用的Object数组,当容量不够的时候就创建更大的数组将老数组拷贝过去
但是昂贵?这恐怕也是最好的办法了吧,ArrayList不是链表,用数组作成的List也只能如此了吧。
JVM会自动进行垃圾收集老数组,也OK了。
------解决方案--------------------
------解决方案--------------------楼主说的没错,如果频繁为其扩容,代价是有点高了。
所以虽然提供了自动扩容的方法,在实际使用中还是事先预估下它的容量,设置一个比较合理的容量,这样会减少些开销。
但也别害怕,容量没那么大的话,其速度还是很快的。
另外扩容一次其容量为原来的1.5倍,有可能会造成空间的浪费,这时可使用trimToSize()方法来将容量调整为列表的当前实际大小(把容量收缩一下)
------解决方案--------------------
------解决方案--------------------预估下 指定大小
要不就不要用它
频繁插入就用链表
------解决方案--------------------无聊下,大家随便看看。