может кто-нибудь объяснить мне, как работает массив массивов внутри? Я хочу спросить, как точно массив, увеличивающий длину и добавление нового элемента. Как внутри он работает? Я хочу объяснить, как список массивов внутренних объектов увеличивает длину и добавляет новый элемент.Как arraylist увеличивает свой размер внутри?
-2
A
ответ
0
Внутренний, ArrayList
(очевидно) использует массив для хранения значений. То же самое происходит и для List<T>
.
Если вы посмотрите на частный метод EnsureCapacity(int)
ArrayList
из (и List<T>
), вы увидите, что, когда ArrayList
не является достаточно большим, чтобы провести следующий пункт, новый внутренний массив выделяется, что вдвое превышает размер предыдущий. После этого содержимое меньшего массива будет скопировано в новый массив.
Это все детали реализации, и вы не можете быть уверены, что каждая реализация делает это одинаково (я думаю).
В любом случае вы должны использовать List<T>
в этом случае. Он работает так же, как ArrayList, но у вас также есть безопасность типов.
'ArrayList' является частью платформы .NET. Это не имеет никакого отношения к ASP.NET. Что касается внутренних элементов: есть только частная переменная, которая поддерживает ссылку на массив. Когда массив должен быть больше для размещения новых элементов, создается новый массив, существующее содержимое копируется в него, а переменная переназначается для ссылки на новый массив, а не на старый. Обратите внимание, что в современном коде вы с большей вероятностью будете использовать 'List' вместо 'ArrayList'. –
http://en.wikipedia.org/wiki/Arraylist –
Это прекрасно, мы можем использовать List вместо Array-List, но Поскольку мы знаем, что длина массива Array не исправлена, мы можем добавлять элементы столько, сколько хотим. Но когда мы добавляем элементы в Array-List Some, где в памяти сохраняются эти значения. Я хочу знать, как автоматически увеличить его длину. В массиве мы определяем его длину и занимаем эту большую длину только в том случае, если мы пытаемся добавить еще больше, чем то, что она показывает ошибку памяти. Но в Array-List мы никогда не видим такой ошибки. Почему и как? –
Asiyana2010