Какая структура данных использует ArrayList внутри?
Как работает ArrayList?
Ответ 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.
-
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% больше по размеру и копирует текущие элементы в новый массив. Это происходит автоматически.