Как элементы хранятся в контейнерах в .Net? - PullRequest
3 голосов
/ 30 июля 2010

Как элементы хранятся в контейнерах в .Net? Например, вектор C ++ хранится в последовательном порядке, а List - нет.
Как они реализованы для контейнеров .Net (Array, ArrayList, ...)?
Спасибо.

Ответы [ 3 ]

1 голос
/ 30 июля 2010

Это зависит от элемента. Но C ++ Vector эквивалентен C # List, а C ++ List<T> эквивалентен C # LinkedList

C # ArrayList в значительной степени, C # List<object>

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

Итак:

C++        C#                      How
Vector     ArrayList / List        Array (sequential)
List       LinkedList              Linked List (non-sequential, i.e. linked)
1 голос
/ 30 июля 2010

В .net контейнеры (даже массивы) обрабатывают весь доступ к ним.Вы не используете указатели для работы с ними (за исключением крайне редких случаев, в которые вы, вероятно, никогда не попадете), поэтому часто не имеет значения, как они хранят информацию.Во многих случаях даже не указано, как все работает за кулисами, поэтому реализация может быть изменена на что-то «лучшее», не ломая вещи, которые по какой-то глупой причине опираются на эти детали.

Последнее, что я слышал, хотя, массивы хранят свои записи последовательно - с оговоркой, что для объектов ссылочного типа (все, что не является структурой), «записи» являются ссылками, а не самими объектами.Данные могут быть где угодно в памяти.Думайте об этом больше как о массиве ссылок, чем о массиве объектов.

ArrayLists, основанные на массивах, должны хранить свои вещи таким же образом.

1 голос
/ 30 июля 2010

Это зависит от контейнера.Поскольку реализация является проприетарной, нет общедоступных спецификаций, определяющих, какой должна быть базовая структура данных .

Если вы заинтересованы в том, чтобы уделить время, я использовал следующие инструменты, прежде чемчтобы понять, как MS реализовала этот класс или что:

  • Отладка с помощью символов отладки Microsoft .NET Framework.
  • Проверка сборок с помощью Reflector.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...