我几乎可以肯定这应该是重复但我搜索了一段时间,但找不到答案.我应该在C#中使用,以取代C++向量和deque 有效.也就是说,我需要一种能够高效地支持直接索引的结构,并且还支持以有效的方式从一端或两端(取决于向量或双端情况)进行删除.
在java中,我通常使用ArrayList至少用于向量,但对于C#,我发现这个源表明:
ArrayList resizes dynamically. As elements are added, it grows in capacity to accommodate them. It is most often used in older C# programs.
.那么新的方法是什么?我又如何为deque案件做些什么呢?
没有人说OrderedDictionary有两个元素副本,一个在散列表中,另一个在列表中,我无法在MSDN上找到OrderedList的复杂度测量.
谢谢
我在哪里可以找到标准.Net库中方法的时间复杂度?
我使用MSDN,它偶尔提到时间复杂性,但不经常(我遇到类似的Java问题).
例如,我想知道是否Microsoft.FSharp.Collections.Set<'T>.MaximumElement
是O(1)(如果类明确总是跟踪最大元素,那将是这种情况.)或者如果它是O(lg n),(如果我们必须搜索它的地图).
这是一个具体的例子,但肯定会记录大O时间的复杂性.
假设我有大小为 N(即 N 个元素)的数据,并且字典是用容量 N 创建的。以下的复杂性是多少:
MS 仅显示条目检索接近 O(1)。但其余的呢?
我已经实现了我认为在 VBA 中过滤 a 的相当垃圾的方法System.Collections.ArrayList
。该代码采用一个列表和一个项目/比较值来过滤掉。它循环遍历列表并删除匹配的项目。然后它重新启动循环(因为你不能For Each
同时.Remove
)
Public Sub Filter(ByVal testValue As Object, ByVal dataSet As ArrayList)
'testValue and the items in `dataSet` all Implement IComparable from mscorlib.dll
'This allows comparing objects for equality
'i.e. obj1.CompareTo(obj2) = 0 is equivalent to obj1 = obj2
Dim item As IComparable
Dim repeat As Boolean
repeat = False
For Each item In dataSet
If item.CompareTo(testValue) = 0 Then 'or equiv; If item = testValue
dataSet.Remove item
repeat = …
Run Code Online (Sandbox Code Playgroud) 我一直认为List<T>
in C#
是一个经典的链表,但最近我读到它实际上是由内部数组支持的.
这是否意味着当我们插入到列表的开头时它是O(n)操作,因为其他元素需要在简单数组中进一步移动一个位置?每次我们添加新项目时,都会创建具有更大容量的新阵列?或者是像一些混合动力ArrayList
的Java
?
如果有人与C#List操作的复杂性有一些联系,那就太好了.
c# ×5
.net ×3
algorithm ×1
arraylist ×1
big-o ×1
c++ ×1
collections ×1
deque ×1
dictionary ×1
filter ×1
list ×1
msdn ×1
performance ×1
vba ×1
vector ×1