1. 程式人生 > >vector與ArrayList擴容機制以及增長大小

vector與ArrayList擴容機制以及增長大小

在知乎上看到一個問題:vector為什麼要用加倍擴容而不是每次增加一個固定的擴容容量?

我先了解了一下vector的擴容原理,vecctor底層是陣列結構,是一段連續的陣列,當集合也就是陣列裝滿以後,如果還需要增加資料,為保證連續性,會重新申請更大的記憶體空間,然後將現有資料複製到新的記憶體空間中,再將新增資料新增到數組裡面,釋放原來的記憶體,其記憶體地址也相應改變,指向原vector的所有迭代器就都會失效。

為什麼vector增長為原來的一倍,而arrayList增長為原來的一半?

ArrayList有兩個屬性,儲存資料的陣列elementData,和儲存記錄數目的size。
Vector有三個屬性,儲存資料的陣列elementData,儲存記錄數目的elementCount,還有擴充套件陣列大小的擴充套件因子 capacityIncrement。

對比兩者結構,arrayList沒有擴充套件因子,也就是說vector可以指定每次增長的容量,arrayList不可以指定擴充套件大小。

在知乎上找到了一篇很好的解釋回答第一個問題:C++ STL中vector記憶體用盡後,為啥每次是兩倍的增長,而不是3倍或其他數值?