Она хранит размер (в памяти) в ArrayList
очень небольшой, и это тактика, когда вы хотите, чтобы переменная быть ненулевым и готов к использованию, но не ожидать для List
будет заполнен немедленно. Если вы ожидаете, что он будет заселен сразу, лучше всего дать ему большее начальное значение - любое «увеличение» ArrayList
внутренне создает новый примитивный массив и копирует элементы. Рост ArrayList
является дорогостоящим и должен быть сведен к минимуму.
Или, если вы создаете лотов экземпляров класса, каждый из которых содержит один из этих List
объектов. Если вы не сразу планируете их заполнять, вы можете сохранить немного памяти, не выделив комнату.
Однако: Существует лучший способ: Collections.emptyList()
. Обычно вы хотите напрямую защищать доступ к этому списку, и (в качестве примера) в своем классе предоставлять вызовы методов, специфичных для домена, которые работают на внутреннем List
. Например, предположим, что у вас есть класс School
, который содержит имена учеников List
. (Держа это просто.)
public class School {
private List<String> studentNames = Collections.emptyList();
public void addStudentName(String name) {
if (studentNames.isEmpty()) {
studentNames = new ArrayList<String>();
}
studentNames.add(name);
}
public void removeStudentName(String name) {
studentNames.remove(name);
if (studentNames.isEmpty()) {
studentNames = Collections.emptyList(); // GC will deallocate the old List
}
}
}
Если вы готовы сделать isEmpty()
проверки и выполнения инициализации/назначения, это лучшая альтернатива создания большого количества пустых ArrayList
экземпляров, так как Collections.emptyList()
статический экземпляр (существует только один) и не поддается изменению.
Возможный дубликат [В чем разница между ArrayList al = new ArrayList(); и ArrayList al = new ArrayList (0)?] (http://stackoverflow.com/questions/4666024/what-is-the-difference-between-arraylist-al-new-arraylist-and-arraylist -al) – Ascalonian
Также : [Зачем начинать ArrayList с начальной пропускной способностью?] (Http://stackoverflow.com/questions/15430247/why-start-an-arraylist-with-an-initial-capacity) – Ascalonian
@Ascalonian Я действительно знаю разницу , то, что я хочу знать, является преимуществом этого, вместо того, чтобы делать 'new ArrayList()'. Не дуп. –
Mauren