Java ArrayList调整当前基础数组的大小还是创建一个新数组?
ArrayList调整当前基础数组的大小还是创建一个新数组? 我读过一些关于ArrayList的可调整大小的数组的文章,但是我认为每次调整大小时都会创建一个新的数组。 实际上,每次容量限制结束时,同一个阵列都会调整大小,或者创建一个新阵列,这会发生什么 谢谢,Java ArrayList调整当前基础数组的大小还是创建一个新数组?,java,arrays,arraylist,Java,Arrays,Arraylist,ArrayList调整当前基础数组的大小还是创建一个新数组? 我读过一些关于ArrayList的可调整大小的数组的文章,但是我认为每次调整大小时都会创建一个新的数组。 实际上,每次容量限制结束时,同一个阵列都会调整大小,或者创建一个新阵列,这会发生什么 谢谢, 实际上,您不能在Java中调整数组的大小。必须创建一个新的 查看OpenJDK实现,您可以看到该方法调用一个名为的方法,如果需要,该方法将通过复制来调整备份对象数组的大小 public void ensureCapacity(int m
实际上,您不能在Java中调整数组的大小。必须创建一个新的 查看OpenJDK实现,您可以看到该方法调用一个名为的方法,如果需要,该方法将通过复制来调整备份对象数组的大小
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
向arrayList添加对象时,如果超出容量 然后将创建新的数组,如下所示
Arrays.copyOf(elementData, newCapacity)
在内部,ArrayList使用方法ensureCapacity确保底层数组始终足够大。从:
在第187行,您可以看到它调用Arrays.copyOf,并指定了长度。它创建一个新的数组,根据数组的类型,它可以用null、零等填充。Java中的数组大小是固定的。不能动态增加数组的大小 在向ArrayList添加对象的情况下,请检查ensureCapacity,如果它超过了限制,则始终会创建新数组
希望这能对您有所帮助。请注意,数组不能更改大小。请注意,它会根据负载系数创建一个更大的新数组,并将所有元素添加到该数组中。它不会在内存中存储多个数组。我不清楚你的问题是否就是这个意思。
178 public void ensureCapacity(int minCapacity) {
179 modCount++;
180 int oldCapacity = elementData.length;
181 if (minCapacity > oldCapacity) {
182 Object oldData[] = elementData;
183 int newCapacity = (oldCapacity * 3)/2 + 1;
184 if (newCapacity < minCapacity)
185 newCapacity = minCapacity;
186 // minCapacity is usually close to size, so this is a win:
187 elementData = Arrays.copyOf(elementData, newCapacity);
188 }
189 }