C#C#语言各个集合介绍

因为其余集合类都已毕了IEnumerable接口,所以任何集合类对象都有八个GetEnumerator()方法,该方法可以再次来到2个兑现了
IEnumerator接口的对象,这一个再次回到的IEnumerator对象既不是集合类对象,也不是汇集的成分类对象,它是三个单身的类对象。通过那一个目的,可以遍历访问集合类对象中的每一个要素对象

HashSet<T>借使集必须重置大小,   Add()            
O(1)                  

SortedList                                                         
O(n)          读写是O(log n),如果

List<T>   借使集合必须重置大小        O(n)             
O(n)             O(1)       O(n log n),            O(n)

             
,就是O(1)或O(n)                                                                    最坏情况O(n^2)

<TKey,TValue>               

比如,ArrayList集合类对应的IEnumerator是 ArrayListEnumeratorSimple
            Array集合类对应的IEnumerator是 SZArrayEnumerator
      (这两个类在.net framework类库文档(msdn)中都从没介绍)

1.System.Colloctions中代表集合的一坐一起的接口有:
1)ICollection
概念全数集合的轻重缓急、枚举数和协办方法。派生于IEnumerable
它定义了集合类最大旨的行为,全体的集合类都落实了那些接口(基接口)
只是它的一举一动太过主导:主要就是2个Count属性,单独落成它并未太马虎义

SortedDictionary

LinkedList<T>AddLast()               AddAfter()     
O(1)                                                        O(n)

4.聚众质量

3)IList
IList完结是可排序且可依照索引访问其成员的值的会合,它本人完毕了ICollection和IEnumerable接口
是全数列表的抽象基类。IList 落成有三种类型:只读、固定大小、可变大小。

4)SortedList
一往直前了接口:IDictionary、ICollection、IEnumerable
SortedLIst兼顾了ArrayList和Hashtable的独到之处,可按键值来排序

集合                   Add                    Insert         
Remove          Item           Sort                   Find

Dictionary      O(1)                                 
            O(1)           O(1)

6)Stack
多福多寿了接口:ICollection、IEnumerable
Stack是堆栈,后进先出的拜会各种要素
可以调用Stack对象的GetEnumerator()方法,得到IEnumerator对象,来遍历堆栈中的各样要素

Stack<T>Push(),尽管窄必须重置                        Pop(),O(1)

Queue<T>Enqueue(),若是队列必须                    Dequeue(),   

                就是O(1)或O(n)             O(1)或O(n)

假诺集合类是用户自定义的集合类,则用户必须兑现它的GetEnumerator()方法,否则不可以应用循环。当然,与那一个自定义集合类对应的IEnumerator类(完毕了该接口的类),也要自定义二个才行

2)IEnumerable
公开枚举数,该枚举数帮助在集结上展开简要迭代
它唯有一个主意
GetEnumerator(),该措施可以回到二个IEnumerator接口,通过它可以遍历集合
大抵全体的集合类都完成了这么些接口

4)IDictionary
IDictionary完毕是键/值对的集纳,它自个儿落成了ICollection和IEnumerable接口
是键/值对的汇聚的基接口。IDictionary
完毕有三体系型:只读、固定大小、可变大小。
IDictionary可称为字典、映射或散列表,它依据键(任意类型)来访问值

多多集合类都提供了千篇一律的效率,例如,SortedList与SortedDictionary的作用大约完全相同。可是,其属性凉时有很大不同。一个凑合使用的内存少,另二个凑合的要素检索速度快。在MSDN文档中,集合的措施平常有总体性指示:O(1),时间与操作项时间一致。O(log
n)

<TKey,Tvalue>                                                                  
键在列表中,就是O(logn);

3)Hashtable
大吉大利了接口:IDictionary、ICollection、IEnumerable
可以向Hashtable中自由添加和删除元素,某个像ArrayList,但没有那么大的品质开支

                                                                                          即使键不在列表中,就是O(n)

5)Queue
落到实处了接口:ICollection、IEnumerable
Queque是队列,先进先出的拜访各类要素
能够调用Queque对象的GetEnumerator()方法,得到IEnumerator对象,来遍历队列中的种种要素

C#,               大小 ,就是O(1)或O(n)

碰面,表示可以经过遍历各种成分来访问的一组对象(尤其是可应用foreach循环访问)
二个会合包罗多个要素,即有贰个集合类对象和N个元素对象

2)BitArray
兑现了接口:ICollection、IEnumerable
管住位值的削减数组。

随集合中成分的加码而扩张,每一个成分要求充实的时日不是线性的,而是呈对数曲线。

2.System.Collections中可以平昔动用的集合类有:
1)ArrayList
百发百中了接口:IList、ICollection、IEnumerable
若果集合未被涂改,ArrayList 就可无恙地同时扶助八个读取器
乘胜向 ArrayList 中添台币素,体积通过重新分配按需自行增添(2倍扩充)
假定急需树立三个对象数组,但不只怕事先了解数组的轻重,就足以拔取ArrayList
ArrayList把装有因素都当作object对象引用,由此在造访ArrayList的要素时要拓展类型转换
可取:动态改变大小、灵活方便的插入和删除成分、可排序
症结:插入时质量不如数组、不是强类型的

 

               重置大小,就是O(1)或O(n)                     O(1)

<TKey,TValue> O(log n)                                     O(log
n)    O(log n)

3.地点提到的两种集合类,他们都是通用的集合类,他们所收受的要素大都是Object类型,当目的放入
了汇集之后,都失去了本来的类型音讯-即那么些通用集合类都不是强类型的
化解办法是接纳强类型的集合类
System.Collections命名空间下的CollectionBase,DictionaryBase,ReadOnlyCollectionBase

System.Collections.Specialized命名空间下的片段类可以满足须求,可以一贯利用也足以继承

相关文章