2013-11-11 5 views
-2

может кто-нибудь объяснить мне, как работает массив массивов внутри? Я хочу спросить, как точно массив, увеличивающий длину и добавление нового элемента. Как внутри он работает? Я хочу объяснить, как список массивов внутренних объектов увеличивает длину и добавляет новый элемент.Как arraylist увеличивает свой размер внутри?

+0

'ArrayList' является частью платформы .NET. Это не имеет никакого отношения к ASP.NET. Что касается внутренних элементов: есть только частная переменная, которая поддерживает ссылку на массив. Когда массив должен быть больше для размещения новых элементов, создается новый массив, существующее содержимое копируется в него, а переменная переназначается для ссылки на новый массив, а не на старый. Обратите внимание, что в современном коде вы с большей вероятностью будете использовать 'List ' вместо 'ArrayList'. –

+0

http://en.wikipedia.org/wiki/Arraylist –

+0

Это прекрасно, мы можем использовать List вместо Array-List, но Поскольку мы знаем, что длина массива Array не исправлена, мы можем добавлять элементы столько, сколько хотим. Но когда мы добавляем элементы в Array-List Some, где в памяти сохраняются эти значения. Я хочу знать, как автоматически увеличить его длину. В массиве мы определяем его длину и занимаем эту большую длину только в том случае, если мы пытаемся добавить еще больше, чем то, что она показывает ошибку памяти. Но в Array-List мы никогда не видим такой ошибки. Почему и как? – Asiyana2010

ответ

0

Внутренний, ArrayList (очевидно) использует массив для хранения значений. То же самое происходит и для List<T>.

Если вы посмотрите на частный метод EnsureCapacity(int)ArrayList из (и List<T>), вы увидите, что, когда ArrayList не является достаточно большим, чтобы провести следующий пункт, новый внутренний массив выделяется, что вдвое превышает размер предыдущий. После этого содержимое меньшего массива будет скопировано в новый массив.

Это все детали реализации, и вы не можете быть уверены, что каждая реализация делает это одинаково (я думаю).

В любом случае вы должны использовать List<T> в этом случае. Он работает так же, как ArrayList, но у вас также есть безопасность типов.