Welcome

首页 / 软件开发 / C# / 构建可反转排序的泛型字典类(3)--实现元素添加及自动扩展

构建可反转排序的泛型字典类(3)--实现元素添加及自动扩展2010-11-263. 实现元素添加及自动扩展

您是一单位CEO,单位占地50亩,这几年在你的带领下,公司不断发展壮大,原来50亩地已经不够用。公司急需扩大地盘,这个现实问题摆在你面前,该怎么办?到旁边单位抢地?不行,现在是法制社会。有两个解决方案,第一是买一块50亩的地,这样你的公司就有两个办公地点,缺点是不能统一管理,两个地点的员工交流不顺畅。第二是买一块100亩的地,把原来的地卖掉,公司全部搬到新地点。这样做的缺点是重建费用太大。

我们要构建的ReversibleSortedList集合也面临着这样的问题,由于使用数组存放数据,数组的空间一旦确定就不能再改变。这一次我们选择了第二种方案,原因很简单,内存间成片数据的拷贝速度非常快,不耗费什么成本。既然搬家费用不高,有什么理由把公司一分为二呢?

ReversibleSortedList中的方案是,初始空间为0,当有元素添加时,空间增长为4,每当添加新元素时,如果现有空间已满,则另开辟一块大小为原来2倍的空间,把原来的数据拷贝到新空间后再添加新元素。当然,原来存放数据的空间这时就变成了待回收的垃圾。

由于数组的长度只能代表ReversibleSortedList的存储空间,并不能表示当前元素个数,所以需要使用一个成员变量来表示当前元素个数:

private int _size; //表示元素个数
public int Count //属性,表示当前元素个数
{
get
{
return this._size;
}
}

前面声明的SortDirectionComparer<T>内部类也需要进行初始化:

private SortDirectionComparer<TKey> _sortDirectionComparer = null;

注意,这里把TKey做为类型参数传递给SortDirectionComparer<T>,TKey本身也是一个类型参数。

在无参实例构造方法中对它们进行初始化:

this._size = 0;

this._sortDirectionComparer = new SortDirectionComparer<TKey>();