Это лучший способ увеличить размер ArrayList? - PullRequest
0 голосов
/ 30 апреля 2018
ArrayList<T> tempArray = new ArrayList<>(size);

Я строил tempArray для сортировки слиянием, которая будет сортировать целые числа или строки в зависимости от контекста. Отсюда тип T ArrayList.

Затем внезапно я продолжал сталкиваться с ошибками IndexOutOfBounds всякий раз, когда это вызывалось:

tempArray.set(index, values.get(leftFirst));

После некоторых исследований я обнаружил, что емкость и размер не означают одно и то же. Таким образом, чтобы «увеличить» размер, я просто добавил цикл for, который выполняется для времен размера, каждый раз добавляющих ноль:

for (int i = 0; i < size; i++)
    tempArray.add(null);

Это лучшее решение?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

На мой взгляд, лучше всего сначала создать массив универсального типа, а затем создать оболочку с ArrayList.

1.Вы можете увидеть, как создать массив из универсальных типов здесь

2.Вы можете увидеть, как создать ArrayList из массива здесь

0 голосов
/ 30 апреля 2018

Вы пытаетесь использовать ArrayList в качестве карты, поэтому просто переключитесь на Map и держите ваши ключи как целые числа:

    Map<Integer, Object> map = new HashMap<>(size);
    map.put(index, values.get(leftFirst));

, а затем получить индекс методом map.get :

    map.get(index)

Обратите внимание, что если ваш индекс начинается с миллиона, у вас будет ~ миллион нулевых значений, которые не будут использоваться. это кажется очень ненужным и неправильно реализованным.

EDIT

из комментариев / вопроса, объявите вашу карту, используя T:

Map<Integer, T> map = new HashMap<>(size);
...