数组扩容问题理解:
数组容量(array.length)和已有数据个数(size)的关系
1.容量是够用的size < array.length
2.容量不够用怎么办(以下用例子说明)(房子容量不够用)
当然是搬家(扩大1.5/2倍)
int newCapacity = array.length * 2;
需要的步骤:
1)找新家 :
int[] newArray = new int[newCapacity];
2)搬家:
for (int i = 0; i < size; i++) {
newArray[i] = array[i];
}
array = newArray;
3)发朋友圈告知一下朋友:
this.array = newArray;
4)将老房子退掉
原来的数组对象,没有引用指向,就变成垃圾了。
注意:
扩容的空间越小,空间浪费越小;
扩容的空间越大,需要扩容的频率越少。
**经验值:**扩容至1.5倍或者2倍较好。
方法例子如下:
//确保容量是否够用,否则进行扩容
private void ensureCapacity() {
if (size < array.length) {
return;
}
int newCapacity = array.length * 2;
int[] newArray = new int[newCapacity];
for (int i = 0; i < size; i++) {
newArray[i] = array[i];
}
array = newArray;
}