Ответ 1
Нет эквивалента resize
, который автоматически создает и добавляет элементы. Вы должны сделать это сами. Однако ensureCapacity
эквивалентно вектору reserve
. Это обеспечит вам номер, но не изменит фактический размер.
Я исхожу из фона С++ и хочу иметь матрицу
ArrayList<arrayList<E>> javamatrix
В С++ я просто делал
std::vector<std::vector<T> > cppmatrix;
std::vector<T>vcol(cols);
cppmatrix.resize(rows,vcol);
Кажется, я не могу найти встроенную функцию resize()
для ArrayLists
для этой задачи, поэтому я должен использовать другую коллекцию? Невозможно сделать это, кроме использования для циклов с javamatrix.add()
?
P.S Я хочу, чтобы он был инициализирован в конструкторе с его размером, поскольку этот размер может быть запрошен до того, как я отредактирую элементы или добавлю или удалю.
Нет эквивалента resize
, который автоматически создает и добавляет элементы. Вы должны сделать это сами. Однако ensureCapacity
эквивалентно вектору reserve
. Это обеспечит вам номер, но не изменит фактический размер.
Вам не нужно изменять размеры arraylists. Размер, который вы изначально проходили, - это только его начальный размер. Если вы попытаетесь добавить элементы за пределы текущего размера, они автоматически изменятся.
В документации :
Каждый экземпляр ArrayList имеет емкость. Емкость - это размер массива, используемого для хранения элементов в списке. Он всегда не меньше размера списка. Поскольку элементы добавляются в ArrayList, его емкость растет автоматически. Детали политики роста не указаны за пределами того факта, что добавление элемента имеет постоянную амортизированную стоимость времени.
В основном, операция "resize()" не требуется, потому что (a) ArrayList автоматически изменяет размер при добавлении элементов и (b) нечетко, какие значения вы сохранили бы в ArrayList < > , например. "null" не очень полезен. Например. в вашем случае вам, вероятно, понадобится цикл для создания объектов MatrixCell.
Для тех читателей, которые хотят знать, как изменить размер массива ArrayList, чтобы уменьшить его, меня озадачивает, почему ArrayList был разработан без метода "resize()". Возможно, потому, что начинающие программисты, скорее всего, увидят этот метод, а затем не поймут, что ArrayList < > auto-resizes.
В Java эта идиома работает, чтобы уменьшить размер ArrayList < > :
list.subList(n,list.size()).clear();
Это работает, потому что "subList" возвращает список, поддерживаемый оригинальным ArrayList < > , поэтому "clear()" работает с исходным "ArrayList < > ".
Я знаю, что этот вопрос уже очень старый, но эта ссылка может помочь java arraylist protectCapacity не работает, код добавляет значение "Null", чтобы отрегулировать текущий размер.
Вместо того, чтобы использовать чисто securityCapacity, вы можете обеспечить размер
public static void ensureSize(ArrayList<?> list, int size) {
list.ensureCapacity(size);
while (list.size() < size) {
list.add(null);
}
}