Liny_@NotePad

沉迷ACG中

<C#高级编程>第9章笔记

YOYO posted @ 2010年3月04日 20:04 in 【C#】 with tags C#高级编程 , 2066 阅读

原以为应当和Java中的集合框架差不多。。好像并没有Set(之后搜索得到在.NET 3.5中增加了HashSet),而多了个集合的概念。

9 集合


除了System.Array之外,其他数据结构都存放在System.Collections命名空间中。

 

数组列表 < System.Collections.ArrayList >

 

有足够的存储单元来存储一定量的对象引用,若超过容量则ArrayList的容量会自动扩展为当前容量的两倍,并重新定位这些元素。

默认大小为16,也可以在构造方法中带入参数以创建一个指定容量的ArrayList

 

增加元素:Add(obj)

获得元素:[pos]

插入到指定位置:Insert(pos, obj)

删除元素:RemoveAt(pos)Remove(obj)

* 添加或删除元素都会使后面的元素在内存中作相应的改变

获得容量:Capacity属性——可以直接对其修改,此时会给ArrayList重新分配新的内存块,其容量大小是所要求的大小。

转换为数组:没有相关方法,只能迭代数组列表手工复制引用。

 

集合

 

可以通过遍历每个元素来访问的一组对象,特别是可以用foreach循环来访问它们。

集合必须实现接口 System.Collections.IEnumerable,它只有一个GetEnumerator()方法,返回一个IEnumerator对象。

 

枚举器应当实现IEnumerator接口,重写其中的只读属性Current、构造器、MoveNext()ReSet()方法。

 

更复杂的集合接口:派生了IEnumerator接口的ICollection接口,它提供了更多的属性和方法。

 

字典(映射/散列表)

 

按照某个键来访问元素

可以自定义字典,通过实现System.Collections.DictionaryBase抽象类;也可以使用Hashtable

如果键为字符串,可以直接使用System.Collections.Specialized.StringDictionary类。

 

ArrayList一样,可以在创建的时候指定原始容量。容量为素数时Hashtable的效率最高。

添加数据项:Add(key, value)

获得数据项:[key]

删除数据项:Remove(key)

获得数据项个数:Count 属性

Hashtable通过对象的Equals()方法判断两个对象是否相等,通过GetHashCode()方法计算散列值。

因此当两个对象的Equals()true时,GetHashCode()值应当相同。当重写了Equals()方法,就必须重写GetHashCode()方法。

 

除了ArrayList类和Hashtable类外,还有其他集合对象如SortedListQueueStack类。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter