Что такое «разрыв» в коллекции? - PullRequest
0 голосов
/ 24 января 2019

У меня есть практический тест MeasureUp 70-483 C #.Один вопрос очень запутанный:

Вы используете Microsoft .NET Framework 4.5 для создания приложения.Ваше приложение должно хранить коллекцию людей в определенном порядке.Если из коллекции удаляется один человек, коллекция автоматически изменяет свой размер, чтобы не оставлять пробелов.Кроме того, доступ к человеку из коллекции не должен удалять человека из коллекции.Вам нужно выбрать класс коллекции.Какой класс вы должны использовать?

LinkedList |Очередь |Стек |ArrayList

В соответствии с MeasureUp ответом является LinkedList.Когда элемент удаляется из ArrayList, он также автоматически изменяет свой размер.Я проверил это через свойство Count.Почему MeasureUp выбрал LinkedList вместо ArrayList?

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Если из коллекции удаляется один человек, коллекция автоматически изменяет размер , чтобы не оставлять пробелов.

Моя интерпретация (в ретроспективе) такова, что LinkedList Абстрактный тип данных автоматически изменяет размер при удалении элемента, тогда как ArrayList основан на ручном изменении размера базового массива путем перемещения элементов вокруг (понижение производительности)

Само собой разумеется, что работа является внутренней по отношению к типам данных BCL, и, с точки зрения пользователя платформы, "нет разрыва", и они отличаются только производительностью и некоторыми другими такими характеристиками.

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

0 голосов
/ 24 января 2019

An ArrayList - это тип антикварной коллекции (начиная с временного периода до Generic v1.x).По сути, это массив, который действует как список.Если вы удаляете что-то из середины, это «оставляет» пробел в массиве, который, я полагаю, заполняет, перемещая каждый элемент в массиве вниз на одну ячейку.Как заметил @DavidG, никто больше не использует этот тип;вместо этого они используют List<T>.

A LinkedList, ну, в общем, связанный список.Первый узел в списке указывает на следующий узел (т. Е. Связан с ним), второй - на третий и т. Д.Если вы вставите узел ( c ) между двумя другими узлами ( a и b ), то узел a будет настроен так, чтобы указывать на c , и c будет установлен на b .Если вы удалите узел (скажем, узел y из списка, например x , y , z ), то x настроен так, чтобы он указывал на z , а y фактически исчезает (без ссылок на него можно собирать мусор).

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

0 голосов
/ 24 января 2019

Count - это количество элементов в списке, необязательно, сколько элементов фактически выделено.

При этом я не верю, что что-то останавливает LinkedList от «резервирования» места для дополнительных (или ранее удаленных) элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...