В настоящий момент я использую List<short>
в качестве буфера для хранения вещей некоторое время, пока вычисление производится для каждого значения на основе других значений, расположенных дальше в буфере. Затем я понял, что это, вероятно, не очень эффективно, так как мне сказали, что List<>
является связанным списком, поэтому каждый раз, когда я делаю, бедному приходится сначала спрыгнуть со всех остальных узлов, чтобы добраться до значения, которое я хочу. Я не хочу использовать регулярный массив, потому что у меня есть грузы Add()
и Remove()
s в других местах кода. Поэтому мне нужен класс, который наследует IList<T>
, но использует регулярную структуру данных массива. Кто-нибудь знает класс в .net, который работает таким образом, поэтому мне не нужно писать самостоятельно? Я попытался использовать ArrayList, но он не типичен!Структура списка данных C# Эффективность
ответ
Нет, a List<T>
является общей коллекцией, а не связанным списком. Если вам нужно добавить и удалить функциональность, то List<T>
- это реализация большинства пользователей по умолчанию.
ОК, спасибо, что моя идея о том, что список <> является связанным списком, был неправильным :( –
если это случай, есть ли причина для использования регулярного массива над списком? –
Для простоты, когда вы имеете дело только с фиксированным число и набор объектов – thecoop
List<T>
не использует реализацию связанного списка. Внутри он использует массив, поэтому он, похоже, именно то, что вам нужно. Обратите внимание: поскольку это массив, Remove/insert может быть дорогостоящей операцией в зависимости от размера списка и элемента позиции, который был удален/вставлен - O (n). Однако, не зная больше о том, как вы его используете, трудно рекомендовать лучшую структуру данных.
Цитирование из раздела примечаний docs.
Класс List (T) является общим эквивалентом класса ArrayList. Он реализует общий интерфейс IList (T) с использованием массива, размер которого динамически увеличивается по мере необходимости.
List<T>
подкрепляется массивом, а не связанным списком. Индексированные обращения List<T>
происходят в постоянное время.
В дополнение к правильному ответу tvanfosson, если вы когда-либо не знаете, как что-то работает внутри, просто загрузите .NET Reflector, и вы точно увидите, как это реализовано. В этом случае, свертывание в индексатор из List<T>
показывает нам следующий код:
public T this[int index]
{
get
{
if (index >= this._size)
{
ThrowHelper.ThrowArgumentOutOfRangeException();
}
return this._items[index];
}
// ...
, где вы можете увидеть, что this._items[index]
является массивом общего типа T
.
Поскольку Reflector больше не является бесплатным, [ILSpy] (http://ilspy.net/) и [DotPeek] (http://www.jetbrains.com/decompiler/) - это другие бесплатные альтернативы. –
- 1. Структура данных C++ для выполнения индексированного списка
- 2. C++ - Структура данных для списка ошибок
- 3. Альтернативная структура данных списка
- 4. wordpress database (wp_post_meta) структура эффективность
- 5. Как структура влияет на эффективность?
- 6. Структура данных в C++
- 7. Unity3D: Эффективность использования очереди (списка) IEnumerators, C#?
- 8. Структура связанного списка печати C
- 9. Эффективность ввода списка
- 10. C++ корректная структура данных
- 11. C++ динамическая структура данных
- 12. C++ структура данных декларации
- 13. Структура данных: уникальность в списках
- 14. Haskell: Какова базовая структура данных для списка?
- 15. Лучшая структура данных для потокового списка подписки?
- 16. Печать простого связанного списка в C++, структура данных
- 17. Структура данных в C - вставка узлов в начале списка
- 18. C++ перегрузка оператора >> в Linked Структура списка данных
- 19. C# Тернарный оператор?: Эффективность
- 20. Prolog Validate Структура списка
- 21. C# Эффективность кода
- 22. Хорошая структура данных для хранения списка
- 23. Лучшая структура данных какао для списка файлов
- 24. Базовые структура данных из списка, кортежа, Dict
- 25. Наилучшая структура данных для упорядоченного списка (производительность)
- 26. TODO новичок Структура списка данных запутать
- 27. Структура данных для непустого набора/списка
- 28. Эффективная структура данных для отсортированного списка
- 29. Java Создание двумерного связанного списка (структура данных)
- 30. C структура как тип данных
Честно говоря, я не думаю, что вам нужно будет слишком сильно подчеркнуть эффективность. Любой выигрыш, который вы получите, будет едва заметным. – lomaxx
'List <>' не является связанным списком. 'LinkedList <>' однако есть. Вы могли заметить это, потому что нет смысла подвергать произвольный доступ в связанном списке. – Dykam
Индексированный доступ к списку - это операция O (1). – digEmAll