ICollection.Count 和 Array.Length 属性的时间复杂度

Time Complexity of ICollection.Count and Array.Length Property

提问人:N8W1nD 提问时间:11/6/2023 最后编辑:N8W1nD 更新时间:11/8/2023 访问量:60

问:

我想知道 ICollection.Count 是否只是一个查找(O(1)中的时间复杂度)或迭代集合。Array.Length 属性也是如此。

另外,如果我可以选择同时使用两者,那么使用哪一个更好?

C# 数组 IChocollection

评论

1赞 Etienne de Martel 11/6/2023
理想情况下,您不应该使用,因为它是一个非通用接口。喜欢。ICollectionICollection<T>

答:

3赞 AgentFire 11/6/2023 #1

Array.Length是一个 O(1) 操作 - 长度被存储并简单地读取返回给用户。

ICollection.Count是接口的成员。接口是协定,因此不包含实现。

因此,任何人都可以编写他们想要的任何实现,因此在一般情况下,复杂性是不确定的。

然而,通过(a)成员是一个属性,并且(b)接口本身是一个独立的实体,它强烈暗示它也应该具有O(1)复杂性。CountIEnumerable<>

评论

2赞 gunr2171 11/6/2023
“接口......不要包含实现“好吧,他们可以,但请不要这样做