Почему я не могу вставить элемент по указанному индексу с вектором? - PullRequest
2 голосов
/ 20 ноября 2011

Я пытался

cache = new Vector<CacheBlock>(1024);
...
cache.add(10, blk); // gives index out of bounds

Так нельзя ли вставить (в указанный индекс) в пустой список?Или как мне заполнить все элементы, если Vector, с нулем или иным образом, чтобы я мог выполнить это?

Ответы [ 2 ]

4 голосов
/ 20 ноября 2011

Вы можете использовать setSize () , чтобы убедиться, что кэш достаточно большой, прежде чем вставлять элементы:

setSize

public void setSize (int newSize)

Устанавливает размер этого вектора.Если новый размер больше текущего размера, новые нулевые элементы добавляются в конец вектора.Если новый размер меньше текущего размера, все компоненты с индексом newSize и выше отбрасываются.

cache = new Vector<CacheBlock>(1024);
cache.setSize(11);
cache.add(10, blk);
2 голосов
/ 20 ноября 2011

Векторы смежны. Они должны иметь элементы с индексом каждый от 0 до размера-1. Там не может быть никаких пробелов. Таким образом, вы не можете вставить индекс за пределы текущих границ вектора, потому что это оставит дыр .

Итак, если вы хотите вставить индекс 10, вы должны сначала убедиться, что список заполнен как минимум 10 элементами. Вы можете использовать setSize , чтобы сделать это (выделение мое):

Устанавливает размер этого вектора. Если новый размер больше текущего размера, новые нулевые элементы добавляются в конец вектор .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...