Вопрос:

Как инициализировать ArrayList определенного размера и получить прямой доступ к его элементам

java list arraylist

2439 просмотра

2 ответа

79 Репутация автора

Я писал что-то, что требует arrayList размера n, поэтому я сделал следующее:

List<Set<Integer>> list = new ArrayList<Set<Integer>(n);

И когда я пытался получить доступ к элементу списка, например,

list.get(someValue that is <n)

Я получил arrayList из ограниченного исключения, так что, думаю, размещение там на самом деле не поможет вам инициализировать список, а просто предварительно выделит место.

Есть ли способ сделать инициализацию, после которой в каждом слоте фактически есть ноль или объекты?

Я заканчиваю тем, что использую цикл for и добавляю n пустых наборов, а затем индексирую в списке.

Есть ли лучший способ ИНИЦИАЛИЗИРОВАТЬ АРРЕЙЛИСТ, ЕСЛИ РАЗМЕР ЗНАЕТСЯ В ПЕРЕДАЧЕ?

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

Надеюсь, мой вопрос понятен.

Заранее спасибо.

Некоторые из вас думают, что я пытался сделать это бессмысленно. Это происходит, когда я пытался решить проблему, связанную с сортировкой сегментов, когда известен индекс набора, к которому я пытался получить доступ в массиве. Так, например, я хочу добавить некоторые элементы в набор в позиции 1, 3, 2, 4 ... тогда было бы удобно, если бы я мог просто получить набор в позиции 1, 3, 2, 4 ...

Автор: ljzhanglc Источник Размещён: 05.01.2018 05:05

Ответы (2)


0 плюса

19383 Репутация автора

Если вы посмотрите на документ для ArrayList.html # ArrayList (int) , это явно упоминается

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

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

Поэтому, когда вы пытаетесь получить доступ к любому элементу ArrayList, он проверяет индекс последнего элемента (т.е. size). Значение sizeувеличивается, когда новый элемент добавляется кList

if (index >= size)
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
Автор: Ravi Размещён: 05.01.2018 05:16

1 плюс

2853 Репутация автора

Если вы посмотрите на документацию по Java API, то увидите, что для этого предусмотрено 3 конструктора ArrayList:

ArrayList ()

ArrayList (Collection c) - создает список, содержащий элементы указанной коллекции, в том порядке, в котором они возвращаются итератором коллекции.

ArrayList (int initialCapacity) - Создает пустой список с указанной начальной емкостью.

Вы можете использовать второй из перечисленных конструкторов, если вам нужно заполнить ArrayListслоты вместо его определения. Вы должны знать, что необходимо передать a Collection, так что вы можете сделать что-то подобное, например:

ArrayList<Integer> al = new ArrayList<>(Arrays.asList(1,2,3,4,5);

Теперь size()у al 5 и он заполнен числами 1,2,3,4 и 5.

Кроме того, вы должны знать, что ArrayListэто не работает, Arraysи его размер не фиксирован - он изменяется в результате добавления или удаления элементов.

Автор: Przemysław Moskal Размещён: 05.01.2018 05:19
Вопросы из категории :
32x32