WEB开发网
开发学院软件开发C语言 Effective C# 原则40:根据需求选择集合 阅读

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

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。而它们的构造函数都有一个重载版本可以指定容量。)

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Effective 原则 根据

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接