Во время работы над ArrayList
, я обнаружил, что после установки начального размера массива с помощью конструктора с initialCapacity
, тогда использование set()
будет генерировать исключение, хотя массив создан, но размер не установлен правильно.
Использование ensureCapacity()
не будет работать, потому что оно основано на массиве elementData
вместо size
.
Существуют и другие побочные эффекты из-за статического DEFAULT_CAPACITY
с ensureCapacity()
.
Единственный способ сделать эту работу - использовать add() столько раз, сколько требуется после использования конструктора.
Пожалуйста, проверьте код ниже.
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List test = new ArrayList(10);
test.set(5, "test");
System.out.println(test.size());
}
Я не уверен, почему java выбрасывает это исключение.
Поведение, которое я ожидал: test.size()
должен возвращать 10, и установить (5,...) должно работать.
АКТУАЛЬНО: выбрасывает исключение IndexOutOfBoundsException
.
Так возникает метод set, вызывающий проблему?