2013-05-08 3 views
0

У меня есть самая странная проблема, возможно, с простым решением.Невозможно добавить в список массивов

Я создал и инициализировал список, а затем приступил к созданию 4 объектов типа списка. В их конструкторе они попадают в список. Или, по крайней мере, предполагается. Я всегда получаю исключение, и я не могу понять, почему. Я установил список размером 402 (для всех возможных значений VK), но в консоли и отладки он всегда говорит, что он имеет размер 0, независимо от того, насколько большим или пустым я его устанавливал ....

Существует больше кода, но я попытался его SSCCE.

Единственная информация о стоимости из консоли заключается в следующем:

Exception in thread "RogueLoveMainThread" java.lang.IndexOutOfBoundsException: Index: 38, Size: 0 

Много извинений за мою глупость

+0

Если это связано с Качели, использовать сочетания клавиш вместо этого. См. [Как использовать привязки клавиш] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html). –

+0

Возможный дубликат [Начальная емкость ArrayList и IndexOutOfBoundsException] (http://stackoverflow.com/questions/11908037/arraylist-initial-capacity-and-indexoutofboundsexception) – Raedwald

ответ

4

Вы создали новый ArrayList с мощностью 402, но все еще есть a размер из 0 после вызова конструктора. Из docs of the constructor call you're using:

public ArrayList(int initialCapacity)

Создаёт пустой список с заданной начальной емкостью.

Параметры:
initialCapacity - начальная емкость списка

А из документации самого ArrayList:

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

Вместимость не размер.

Итак, некоторые варианты:

  • не Заполняют список с нулевыми записями, пока есть получили размер вы хотите
  • использовать массив вместо списка (в конце концов, вам это нужно только фиксированный размер, верно?)
  • использовать Map<Integer, Key> вместо
+0

Спасибо. Я не могу использовать массив, поскольку мне нужно кое-что сделать с переназначением ключей, я думаю, что я просто заполнил его нулями –

+0

Э ... Как насчет раздела «Параметры» в конце ответа? – skuntsel

+0

@BenjaminTilbury: Что вы подразумеваете под «нужно что-то делать»? Если у вас есть другие методы, которые принимают список, вы всегда можете использовать 'Arrays.asList'. –

3

keyList.add(keyCode, this) вставки на позиция от keyCode. Поскольку ваш список по-прежнему пуст (размер 0), вы не можете вставить ни в какое положение позиции больше 0.

Возможно, вы захотите иметь коды к ключам, не так ли?Существует Map<K, V> для этого:

static Map<Integer, Key> keyMap = new TreeMap<>(); 

public Key(int defaultCode) { 
    keyMap.add(keyCode, this); 
} 

Если вам нужен ключ, его код, вы можете получить его из Map следующим образом:

keyMap.get(keyCode); 
Смежные вопросы