Да, вы должны пройти способность к конструкторе в ArrayList
в данном случае, вот почему:
Конструктор вы могли бы назвать это следующим образом:
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
при пропускании initialCapacity
вы» re установить размер массива, который поддерживает ArrayList
.
Скажите, что вы собираетесь добавить в список, и этот элемент приведет к изменению размера списка. Вот ряд вызовов функций, которые будут иметь место:
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (elementData == EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
В заключение, если вы знаете, окончательный размер, путем передачи его в конструктор, вы собираетесь, чтобы гарантировать, что массив никогда не должен быть повторно размер.
Если конечная мощность достаточно велика, и ArrayList
будет относительно незаселенным в течение длительного периода времени, то вы можете не захотеть выделить столько памяти, то есть, возможно, было бы лучше иметь его при необходимости , В противном случае я бы передал начальную емкость.
Если вы являетесь \ динамическим, то это может быть полезно. Но я думаю, что лучше не беспокоиться о повышении производительности с этими изменениями, если вы не видите реальной проблемы. – kosa
Если вы знаете размер, нет НИКАКОЙ причины, почему вы не должны использовать его для создания экземпляра списка - это то, что конструктор, который имеет емкость, предназначен для ... – assylias