清除 ArrayList 是否会保留其容量

Cem*_*mre 5 java arraylist capacity

正如标题所提到的,如果我创建一个初始容量为 500 的 ArrayList,然后在一段时间后清除它,它的容量仍然是 500 吗?或者我需要为此重新初始化它吗?

Miq*_*uel 5

是的,它保留了其容量。(至少在 Oracle VM 的实现中不是):

/**
 * Removes all of the elements from this list.  The list will
 * be empty after this call returns.
 */
public void clear() {
    modCount++;

    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;

    size = 0;
}
Run Code Online (Sandbox Code Playgroud)

需要明确的是: anArrayList由数组支持(例如 ArrayList 的 int[]),并且每当您通过创建新数组并复制内容来超出容量时,该数组就会扩展。清除不会(如代码中所示)创建一个新的较小数组,将内容复制到那里,并销毁旧的大数组。