в данный момент я использую a List<short>
как буфер для содержания вещей некоторое время, в то время как вычисление сделано к каждому значению на основе других значений далее вниз буфером. Я затем понял, что это, вероятно, не было очень эффективно, поскольку мне сказали это List<>
связанный список так каждый раз, когда я делаю whatever = myList[100];
бедняжка должна спрыгнуть от всех других узлов сначала для получения до значения, которое я хочу. Я не хочу использовать эквидистантную антенную решетку, потому что у меня есть загрузки Add()
и Remove()
s перебрасывающийся в других местах в коде. Таким образом, мне нужен класс, который наследовался IList<T>
но использует структуру данных эквидистантной антенной решетки. Кто-либо знает класс в .NET, который прокладывает себе путь так, я не должен писать свое собственное? Я пытался использовать ArrayList, но это 'не универсально!
Нет, List
- это общая коллекция, а не связанный список. Если вам нужно добавить или удалить функциональность, тогда List
- это реализация, которую большинство людей используют по умолчанию.
List
не использует реализацию связанного списка. Внутри он использует массив, поэтому кажется, что это именно то, что вам нужно. Обратите внимание, что, поскольку это массив, удаление / вставка может быть дорогостоящей операцией в зависимости от размера списка и удаляемого / вставляемого элемента позиции - O (n). Однако, не зная больше о том, как вы его используете, трудно рекомендовать лучшую структуру данных.
Цитата из раздела «Примечания» в документах .
Класс List (T) является универсальным эквивалентом класса ArrayList. Он реализует общий интерфейс IList (T) с использованием массива, размер которого динамически увеличивается по мере необходимости.
List
поддерживается массивом, а не связанным списком. Индексированные обращения к List
происходят в постоянное время.
В дополнение к правильному ответу tvanfosson, если вы когда-нибудь не уверены, как что-то работает внутри, просто загрузите .NET Reflector , и вы сможете точно увидеть, как обстоят дела реализовано. В этом случае переход к индексатору List
показывает нам следующий код:
public T this[int index]
{
get
{
if (index >= this._size)
{
ThrowHelper.ThrowArgumentOutOfRangeException();
}
return this._items[index];
}
// ...
, где вы можете видеть, что this._items [index]
представляет собой массив общий тип T
.