Я подозреваю, что вы запутались между емкостью и размером . Эта строка:
ArrayList decoded = new ArrayList(10);
... создает список с емкостью , равной 10 (ему не нужно будет расти внутри, пока не будет добавлен одиннадцатый элемент), но размером , равным 0. только индекс, вы можете добавить что угодно 0.
Если вы хотите иметь возможность устанавливать значения в произвольных позициях, вам следует сначала заполнить список, например, (используя дженерики только потому, что я ненавижу использовать необработанные типы):
List<String> decoded = new ArrayList<String>(10);
for (int i = 0; i < 10; i++) {
decoded.add(""); // Or perhaps null
}
...
decoded.set(1, "S"): // This is now fine, replacing element 1
В качестве альтернативы, если вы уже знаете нужный размер, вы можете использовать массив для начала - они имеют фиксированный размер, и каждый элемент является значением по умолчанию для типа элемента (так что null
для строк, например):
String[] decoded = new String[10];
decoded[1] = "S";