ArrayIndexOutOfBoundsException для инициализированного вектора - PullRequest
2 голосов
/ 15 марта 2011

У меня есть это:

public class DoubleList<Key, Elem> implements ADTDoubleList<Key, Elem> {

    private Vector<Node<Key, Elem>> leftRight = new Vector<Node<Key, Elem>>(2);
    private int[] numLeftNumRight = new int[2];

    public DoubleList() {
        this.leftRight.set(0, null);
        this.leftRight.set(1, null);
        this.numLeftNumRight[0] = 0;
        this.numLeftNumRight[1] = 0;
    }
}

, и оно вызывает исключение ArrayIndexOutOfBoundsException.

Я не знаю почему.Может ли кто-нибудь мне помочь?

1 Ответ

4 голосов
/ 15 марта 2011

Вы не можете установить элемент в Vector или любом другом List, если этот индекс еще не занят. Используя new Vector<Node<Key, Elem>>(2), вы гарантируете, что вектор изначально имеет емкость для двух элементов, но он все еще пуст, и поэтому get ting или set ting с использованием любого индекса не будут работать.

Другими словами, список еще недостаточно вырос для того, чтобы этот индекс был действительным. Используйте это вместо:

this.leftRight.add(null);  //index 0
this.leftRight.add(null);  //index 1

Вы также можете сделать:

this.leftRight.add(0, null);
this.leftRight.add(1, null);
...