2015-03-02 4 views
-1

Это очень простой пример, и я использовал только существующие методы.Проблема с ArrayList

import java.util.ArrayList; 

public class A { 

    public static void main(String[] args) { 
     ArrayList<Integer> al = new ArrayList<Integer>(); 
     // This should create an ArrayList of initial capacity 10 
     al.add(3,5); // Add 5 at index 3 
     al.add(7,2); // Add 2 at index 7 
     al.add(9,6); // Add 6 at index 9 
     System.out.println(al); 
    } 
} 

Однако, он бросает следующее исключение:

Исключение в потоке "основной" java.lang.IndexOutOfBoundsException: Индекс: 3, Размер: 0

Я не знать, почему исключение выбрано. Это выглядит совершенно законным для меня.

+1

Вы не можете добавлять в произвольных точках. Только до конца массива http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add(int,%20E) –

+0

Это не сработает, даже если я do 'trimToSize()' – Boyyett

+0

Я предполагаю, что [Список # add() API] (http://docs.oracle.com/javase/8/docs/api/java/util/List.html#add-intEE -) должен дать достаточный намек .. –

ответ

2

Вы не можете добавить значение в индекс 3 в пустой список. Емкость списка массивов - это размер базового массива; индексы по-прежнему должны находиться в пределах диапазона элементов, фактически добавленных в arraylist.

+0

Итак, как они ожидают, что мы будем использовать метод add с двумя аргументами? Как только перезаписать существующие значения? – Boyyett

+0

add() с двумя аргументами не перезаписывает существующие значения. Его можно использовать для добавления значений до других значений, уже находящихся в списке. – yole

+0

Хорошо, как насчет перегруженной функции удаления? Если мы работаем с целыми числами, как узнать, хотим ли мы удалить это целое число с этим значением или целое в этом индексе? – Boyyett

0

Емкость не означает, что есть 10 пустых слотов, которые вы можете присвоить своим значениям. Это не значит, что ArrayList должен работать. Вы можете поместить свои значения в список только в том случае, если индекс находится между 0 и list.size-1, поэтому вы получаете исключение.

+0

Хорошо, как насчет перегруженной функции удаления? Если мы работаем с целыми числами, как узнать, хотим ли мы удалить это целое число с этим значением или целое в этом индексе? – Boyyett

+0

Он удалит элемент в позиции int или удалит элемент с помощью значения Integer. Есть разница. – Lamorak

1

Соответствующая документация here

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

+0

Хорошо, как насчет перегруженной функции удаления? Если мы работаем с целыми числами, как узнать, хотим ли мы удалить это целое число с этим значением или целое в этом индексе? – Boyyett

+0

Да, ты меня там. Может быть, вы должны задать другой вопрос. –

+0

Хорошо, я просто не хотел спамить, создавая разные темы по одной теме. – Boyyett

0

Ваш код попытается найти элемент на index = 3, чтобы он мог переместить его в следующее положение. Однако он не может найти его, поскольку там нет элемента.

0

См официальные документы для дополнения (INT индекс, E) элемент он бросает java.lang.IndexOutOfBoundsException: если индекс находится вне диапазона (индекс < 0 || индекс> размер())

Убедитесь, что ваш случай удовлетворяет условиям или нет !!!

Это будет работать

ArrayList<Integer> al = new ArrayList<Integer>(); 
    // This should create an ArrayList of initial capacity 10 
    al.add(0,5); // Add 5 at index 0 
    al.add(1,2); // Add 2 at index 1 

    System.out.println(al); 

Вашего размера случай() = 0. Таким образом, вы не можете поставить прямо на al.add (3,5)

Смежные вопросы