Начальный размер для ArrayList



вы можете установить начальный размер для ArrayList, выполнив



ArrayList<Integer> arr=new ArrayList<Integer>(10);


однако, вы не можете сделать



arr.add(5, 10);


потому что это вызывает исключение out of bounds.



какой смысл устанавливать начальный размер, если вы не можете получить доступ к выделенному вами пространству?



функция add определяется как add(int index, Object element) поэтому я не добавляю в индекс 10.

871   12  

12 ответов:

вы путаете размер списка массивов с его емкостью:

  • the в размере - количество элементов в списке;
  • the емкости сколько элементов список потенциально может вместить без перераспределения его внутренних структур.

когда вы называете new ArrayList<Integer>(10), вы устанавливаете начальный список емкости, а не его размер. Другими словами, при построении таким образом, массив список начинает свою жизнь пустым.

один из способов добавить десять элементов в список массива с помощью цикла:

for (int i = 0; i < 10; i++) {
  arr.add(0);
}

сделав это, теперь вы можете изменять элементы с индексами 0..9.

Если вы хотите список с предопределенным размером вы также можете использовать:

List<Integer> arr = Arrays.asList(new Integer[10]);

Если вы хотите использовать коллекции.fill (list, obj); для того, чтобы заполнить список с повторяющимся объектом в качестве альтернативы вы можете использовать

ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));

строка копирует 10 раз 0 в ваш ArrayList

емкости на ArrayList Это не то же самое, что его в размере. в размере равно количеству элементов, содержащихся в ArrayList (и любое другое List реализации).

The емкости - это просто длина базового массива, который используется для внутреннего хранения элементов ArrayList, и всегда больше или равно в размере из списка.

при вызове set(index, element) on список, то index относится к фактическому количеству элементов списка (=size) (который равен нулю в вашем коде, поэтому AIOOBE выбрасывается), а не на длину массива (=емкость) (что является деталью реализации, специфичной для ArrayList).

The set способ является общим для всех List реализации, такие как LinkedList, который фактически не реализован массивом, а как связанная цепочка записей.

Edit: вы на самом деле использовать add(index, element) метод, а не set(index, element), но принцип здесь тот же.

Если вы хотите добавить элементы с индексом, вы можете вместо этого использовать массив.

    String [] test = new String[length];
    test[0] = "add";

10-это начальная емкость AL, а не размер (который равен 0). Вы должны упомянуть начальную емкость до некоторого высокого значения, когда у вас будет много элементов, потому что это позволяет избежать накладных расходов на расширение емкости по мере добавления элементов.

Я думаю, что точный ответ на ваш вопрос будет такой:

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

сейчас в вашем списке нет элементов, поэтому вы не можете добавить в индекс 5 списка, когда он не существует. Вы путаете емкость списка с его текущим размером.

просто звоните:

arr.add(10)

чтобы добавить целое число в свой ArrayList

хотя ваш ArrayList имеет емкость 10, реальный список не имеет элементов. Метод Add используется для вставки элемента в реальный список. Поскольку он не имеет элементов, вы не можете вставить элемент с индексом 5.

Если вы хотите добавить 10 элементов в ваш ArrayList вы можете попробовать это:

for (int i = 0; i < 10; i++)
    arr.add(i);

Если вы уже объявили переменную размера массива, вы бы использовали переменную size вместо числа '10'

Это может помочь кому-то -

ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));

ArrayList myList = new ArrayList(10);

//  myList.add(3, "DDD");
//  myList.add(9, "III");
    myList.add(0, "AAA");
    myList.add(1, "BBB");

    for(String item:myList){
        System.out.println("inside list : "+item);
    }

/*объявить начальную capasity arraylist-это не что иное, как экономия времени сдвига внутри; когда мы добавляем элемент внутренне, он проверяет capasity, чтобы увеличить capasity, вы можете добавить элемент в 0 индекс изначально, затем 1 и так далее. * /

Comments

    Ничего не найдено.