第九章 集合

1、除了基类System.Array以外,其他的数据结构类都在System.Collections命名空间中;

2、ArrayList如果没有指定大小,默认大小为16,修改ArrayList的容量会导致重新分配内存;

3、ICollection接口派生于IEnumerable,比IEnumerable多了,可以返回集合中元素个数,还可以把集合

复制到数组中,并提供信息,说明它是否线程安全。

4、字典还可以称为映射或散列键,希望把对象保存为数组,但希望使用其他数据类型当索引字典就很合

适。

5、抽象基类System.DictionaryBase,还有已经建立好的.net基类,

System.Collections.Specialized.StringDictionary;

6、由于字段内部算法使用素数,所以HashTable使用素数当容量效率最高。

7、字典没有Insert方法,当添加一个数据项时,该数据项会放在字典的任何位置。

8、要作为字典key类的对象,必须重写GetHashCode方法和Equals方法,该方法速度必须比较快,返回的

必须一致,而且返回值最好平均分布在int可以存储的数字整个范围(int.MinValue,int.MaxValue)。

9、字典的元素越多,键之间的崩溃危险越大,所以最好保持字典容量大于其中的元素个数,负载的最大

值越小,散列表的工作效率越高,但其占用的内存也越多,当散列表为了增大其容量而重新分配内存时候

总会选择一个素数当其容量大小

10、当提供一个Equals的重写,没有提供GetHashCode方法重写编译器就会报错。

11、String.GetHashCode()会根据字符串的内容生成分布均匀的数字

12、基本数字类型也定义了GetHashCode方法,但该方法只返回变量的值,因此基本类型不应该用作键,

如果字典根据键找不到相关对象,就返回null。