目前我正在使用List<short>
作为缓冲区来保存一段时间,同时根据缓冲区下方的其他值对每个值进行计算。然后我意识到这可能不是很有效,因为我被告知List<>
是一个链表,所以每次我做whatever = myList[100];
时,可怜的事情是必须首先跳过所有其他节点达到我想要的价值。我不想使用常规数组,因为我在代码的其他地方有大量的Add()
和Remove()
。所以我需要一个继承IList<T>
但使用常规数组数据结构的类。有没有人知道.net中的一个类是这样工作的,所以我不必自己编写?我尝试使用ArrayList,但它'通用!
答案 0 :(得分:8)
List<T>
不使用链接列表实现。在内部它使用一个数组,所以它看起来正是你需要的。请注意,因为它是一个数组,所以删除/插入可能是一个昂贵的操作,具体取决于列表的大小和被删除/插入的位置项 - O(n)。但是,如果不了解您如何使用它,则很难推荐更好的数据结构。
引用docs的备注部分。
List(T)类是ArrayList类的通用等价物。它使用一个数组实现IList(T)泛型接口,该数组的大小根据需要动态增加。
答案 1 :(得分:2)
List<T>
由数组支持,而不是链接列表。 List<T>
的索引访问在固定时间内发生。
答案 2 :(得分:2)
除了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
的数组。
答案 3 :(得分:1)
不,List<T>
是通用集合,而不是链表。如果您需要添加和删除功能,则List<T>
是大多数人默认使用的实现。