Подтвердить что ты не робот

Как работает ArrayList?

Какая структура данных использует ArrayList внутри?

4b9b3361

Ответ 1

Внутри ArrayList используется Object[].

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

Теперь осталось больше места, и новый элемент добавляется в следующее пустое пространство.

Так как людям действительно нравится исходный код:

/**
 * The array buffer into which the elements of the ArrayList are stored.
 * The capacity of the ArrayList is the length of this array buffer.
 */
private transient Object[] elementData;

Прямо из JDK.

Ответ 2

Он использует Object[] и создает больший массив, когда массив заполняется.

Здесь вы можете прочитать исходный код.

Ответ 3

ArrayList использует массив объектов для хранения данных внутри.

Когда вы инициализируете arraylist, создается массив размером 10 (размер по умолчанию), и любой элемент, добавленный в массивList, фактически добавляется в этот массив. 10 - это размер по умолчанию и может быть передан как параметр при инициализации массива.

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

Поскольку базовая структура данных используется как массив, довольно просто добавить новый элемент в массивList, поскольку он добавлен в конец списка. Когда элемент должен быть добавлен где-либо еще, скажем, начало, то все элементы должны будут переместить одну позицию вправо, чтобы создать пустое пространство в начале для добавления нового элемента. Этот процесс занимает много времени (линейное время). Но Преимущество ArrayList заключается в том, что извлечение элемента в любой позиции очень быстро (постоянный), поскольку базовый он просто использует массив объектов.

Ответ 4

ArrayList имеет базовую структуру данных:

private transient Object[] elementData;

Когда мы на самом деле создаем ArrayList, выполняется следующий фрагмент кода:

 this.elementData = new Object[initial capacity];

ArrayList может быть создан двумя способами, указанными ниже:

  • List list = new ArrayList();

Вызывается конструктор по умолчанию и внутренне создает массив Object с размером по умолчанию 10.

  1. List list = new ArrayList(5);

Когда мы создаем ArrayList таким образом, вызывается конструктор с целым аргументом и создайте массив Object с размером по умолчанию 5.

Внутри метода add проверяется, больше ли текущий размер заполненных элементов/равен максимальному размеру ArrayList, то он создаст новый ArrayList с размером нового arraylist = (current arraylist*3/2)+1 и скопирует данные со старого на новый список массивов.

Ответ 5

Он использует массив и пару целых чисел, чтобы указать первое значение - последний индекс значения

private transient int firstIndex;

private transient int lastIndex;

private transient E[] array;

Вот пример реализации.

Ответ 6

Как правило, структуры типа ArrayLists реализуются с помощью старого старинного массива, определенного внутри класса, а не непосредственно доступного вне класса.

Определенный объем пространства изначально выделяется для списка, и когда вы добавляете элемент, который превышает размер массива, массив будет повторно инициализирован с новой емкостью (которая обычно несколько кратная текущего размера, поэтому структура не постоянно перераспределяет массивы с добавлением каждой новой записи).

Ответ 7

исходный код платформы Java свободно доступен. Здесь выдержка:

public class ArrayList<E> extends AbstractList<E>
  implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
  /**
   * The array buffer into which the elements of the ArrayList are stored.
   * The capacity of the ArrayList is the length of this array buffer.
   */
  private transient E[] elementData;
  .
  .
  .
}

Ответ 8

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

При копировании массива принимается A (незначительный) удар производительности, поэтому можно установить размер внутреннего массива в конструкторе списка массивов.

Кроме того, он реализует java.util.Collection и и java.util.list, и поэтому можно получить элемент по указанному индексу и итерабельно (точно так же, как массив).

Ответ 9

Он использует объект []. Когда массив заполнен, он создает новый массив, который на 50% больше по размеру и копирует текущие элементы в новый массив. Это происходит автоматически.