Как изменить размер ArrayList - PullRequest
16 голосов
/ 13 ноября 2010

Я пришел из C ++ и хочу иметь матрицу

ArrayList<arrayList<E>> javamatrix 

В C ++ я бы просто сделал

std::vector<std::vector<T> > cppmatrix;
std::vector<T>vcol(cols);
cppmatrix.resize(rows,vcol);

Я не могу найти встроенную-в resize() функция для ArrayLists для этой задачи, так что я должен использовать другую коллекцию?Нет ли способа сделать это, кроме как использовать циклы for с javamatrix.add()?


PS Я хочу, чтобы он был инициализирован в конструкторе с его размером, так как этот размер может быть запрошен до того, как я отредактирую элементы, добавлю или удалю.

Ответы [ 4 ]

16 голосов
/ 13 ноября 2010

Нет эквивалента resize, который автоматически создает и добавляет элементы. Вы должны сделать это самостоятельно. Однако ensureCapacity эквивалентно векторному reserve. Это обеспечит вам место, но не изменит фактический размер.

8 голосов
/ 13 ноября 2010

Вам не нужно изменять размер списков.Размер, который вы изначально передаете, это только его начальный размер.Если вы попытаетесь добавить элементы сверх его текущего размера, он автоматически изменит свой размер.

Из документации :

Каждый экземпляр ArrayList имеет емкость.Емкость - это размер массива, используемого для хранения элементов в списке.Это всегда как минимум размер списка.Когда элементы добавляются в ArrayList, его емкость увеличивается автоматически.Детали политики роста не указаны за исключением того факта, что добавление элемента имеет постоянную амортизированную временную стоимость.

3 голосов
/ 23 апреля 2013

В основном, операция 'resize ()' не нужна, потому что (a) автоматическое изменение размера ArrayList при добавлении элементов, и (b) неясно, какие значения вы будете хранить в ArrayList <>, например, "null" - этоне очень полезноНапример, в вашем случае вам, вероятно, в любом случае понадобится цикл для создания объектов MatrixCell.

Для тех читателей, которые хотят знать, как изменить размер ArrayList, чтобы сделать его меньшим , он озадачивает, почемуArrayList был разработан без метода resize ().Возможно, это потому, что начинающие программисты, скорее всего, увидят этот метод и не поймут, что ArrayList <> автоматически изменяет размеры.

В Java эта идиома работает, чтобы уменьшить размер ArrayList <>:

    list.subList(n,list.size()).clear();

Это работает, потому что 'subList' возвращает List, поддерживаемый оригинальным ArrayList <>, поэтому поэтому clear () работает с оригинальным ArrayList <>.

1 голос
/ 14 января 2015

Я знаю, что этот вопрос уже очень старый, но эта ссылка может помочь java arraylist sureCapacity не работает , код добавляет значение "Null" для настройки текущего размера.

Вместо этогоиспользования чисто verifyCapacity вы можете иметь sureSize

public static void ensureSize(ArrayList<?> list, int size) {

    list.ensureCapacity(size);
    while (list.size() < size) {
        list.add(null);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...