Effective C# 原则40:根据需求选择集合
2009-02-19 08:17:44 来源:WEB开发网private string [] _cities = new string[ 100 ];
public void SetDataSources( )
{
myListBox.DataSource = _cities;
}
public void AddCity( string CityName )
{
String[] tmp = new string[ _cities.Length + 1 ];
_cities.CopyTo( tmp, 0 );
tmp[ _cities.Length ] = CityName;
_cities = tmp; // swap the storage.
}
即使在调用AddCity 之后,列表框的数据源还是使用拷贝前的旧数据。你新添加的城市根本没有在列表框中显示。
ArrayList类是在数组上的一个高度抽象类。ArrayList集合混合了一维数组和链表的语义。你可以在ArrayList使用迭代,而且你可以调整它的大小。ArrayList基本上把所有责任都委托给了它所包含了数组上,这就是说ArrayList类与数组类在性能上很接近。它的最大好处就是在你不清楚你的集合具体要多大时,ArrayList类要比数组类好用得多。ArrayList可以随时扩展和收缩。但你还是要在移动和拷贝元素上有性能损失,但这些算法的代码已经写好了而且经过了测试。因为内部存储的数组已经封装在ArrayList对象内,因此陈旧数据的情况就不存在了:用户的指针是指向ArrayList对象而不是内部的数组。.Net框架里的ArrayList集合有点类似C++中标准库里的向量类。
队列和栈类在System.Array类上提供了特殊的接口。这些特殊的接口是自定义的先进先出的队列接口和后进先出的栈接口。时刻记住,这些集合的内部存储都是基于数组的。在修改集合的大小时同样会得到性能的损失。
(译注:对于这样的一些集合,在初始化时都有一个大小的参数,应该尽可能的给定集合的容量大小,这里的大小并不是一次性申明和使用的,而是集合中的元素小于这个大小时,不会有移动和拷贝元素的性能损失。因此合理的选择这些集合的容量大小是很关键的。队列的默认大小是32,而栈的默认大小是10,ArrayList默认是0。而它们的构造函数都有一个重载版本可以指定容量。)
- ››根据经纬度坐标取详细地址(包括国,省,市,街道...
- ››根据浏览器和分辨率调用CSS代码
- ››根据批量URL生成有书签的PDF文档的解决方案
- ››根据status信息对MySQL服务器进行优化
- ››Effective C# 原则40:根据需求选择集合
- ››Effective C# 原则41:选择DataSet而不是自定义的...
- ››Effective C# 原则42:使用特性进行简单的反射
- ››Effective C# 原则43:请勿滥用反射
- ››Effective C# 原则44:创建应用程序特定的异常类
- ››Effective C# 第6章:杂项
- ››Effective C# 原则45:选择强异常来保护程序
- ››Effective C# 原则47:选择安全的代码
更多精彩
赞助商链接