Ind*_*tIs 0 java arrays arraylist
ArrayList调整当前底层数组的大小或创建一个新数组?我读过有时会引用ArrayList的"可调整大小的数组",但我认为每次"调整大小"时它都会被创建一个新的.实际上会发生什么,相同的数组会被调整大小或每次都创建一个新数组(容量限制结束)?
谢谢,确实是的
您无法在Java中调整数组大小.必须创建一个新的.
查看OpenJDK实现,您可以看到该add方法调用一个名为的方法ensureCapacity,Object如果需要,可以通过复制来"调整"后备数组.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |