admin - 2008-6-16 18:38:00
3.
实现元素添加及自动扩展您是一单位CEO
,单位占地50
亩,这几年在你的带领下,公司不断发展壮大,原来50
亩地已经不够用。公司急需扩大地盘,这个现实问题摆在你面前,该怎么办?到旁边单位抢地?不行,现在是法制社会。有两个解决方案,第一是买一块50
亩的地,这样你的公司就有两个办公地点,缺点是不能统一管理,两个地点的员工交流不顺畅。第二是买一块100
亩的地,把原来的地卖掉,公司全部搬到新地点。这样做的缺点是重建费用太大。íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi我们要构建的ReversibleSortedList集合也面临着这样的问题,由于使用数组存放数据,数组的空间一旦确定就不能再改变。这一次我们选择了第二种方案,原因很简单,内存间成片数据的拷贝速度非常快,不耗费什么成本。既然搬家费用不高,有什么理由把公司一分为二呢?íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiReversibleSortedList中的方案是,初始空间为0,当有元素添加时,空间增长为4,每当添加新元素时,如果现有空间已满,则另开辟一块大小为原来2倍的空间,把原来的数据拷贝到新空间后再添加新元素。当然,原来存放数据的空间这时就变成了待回收的垃圾。íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi由于数组的长度只能代表ReversibleSortedList
的存储空间,并不能表示当前元素个数,所以需要使用一个成员变量来表示当前元素个数:íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiprivate int _size; //表示元素个数íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public int Count //属性,表示当前元素个数íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
getíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return this._size;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi前面声明的SortDirectionComparer<T>
内部类也需要进行初始化:íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiprivate SortDirectionComparer<TKey> _sortDirectionComparer = null;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi注意,这里把TKey
做为类型参数传递给SortDirectionComparer<T>
,TKey
本身也是一个类型参数。íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi在无参实例构造方法中对它们进行初始化:íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰithis._size = 0;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this._sortDirectionComparer = new SortDirectionComparer<TKey>();íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi剩下的就是插入数据的方法,共有1
个公方法:Add
,3
个私有方法:Insert
、EnsureCapacity
、InternalSetCapacity
。具体的方法代码请参考稍后的ReversibleSortedList 0.3
版本。关于以上几个方法的算法及作用,请参考代码中的注释。这里讲一下添加数据的过程,如图1
所示,首先利用Array.BinarySearch查找到插入点,然后把插入点及其后元素向后移动一个位置,最后在插入点插入数据。这里有一点需要明确,任何时候,数据在内存中都是以有序的方法排列的。íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi为了对程序进行测试,添加了一个Print
方法用于打印数组中的元素。代码测试成功后可以把它删除。并且在Main()
方法中依次添加9
个元素并在期间打印数组元素进行观察。íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiReversibleSortedList 0.3版本:添加数据(以下代码可直接拷贝并运行)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiusing System;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
using System.Collections;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
using System.Collections.Generic;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
using System.ComponentModel;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public class ReversibleSortedList<TKey, TValue>íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#region 成员变量íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private TKey[] keys=new TKey[0]; //键数组íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private TValue[] values; //值数组íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private static TKey[] emptyKeys;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private static TValue[] emptyValues;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private SortDirectionComparer<TKey> _sortDirectionComparer = null;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private int _size; //表示元素个数íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#endregioníS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#region 构造方法íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
//类型构造器íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
static ReversibleSortedList()íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //设置数组初始状态值íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
ReversibleSortedList<TKey, TValue>.emptyKeys = new TKey[0];íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
ReversibleSortedList<TKey, TValue>.emptyValues = new TValue[0];íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public ReversibleSortedList()íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.keys = ReversibleSortedList<TKey, TValue>.emptyKeys;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.values = ReversibleSortedList<TKey, TValue>.emptyValues;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this._size = 0;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this._sortDirectionComparer = new SortDirectionComparer<TKey>();íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#endregioníS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#region 公有属性íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public int Capacity //容量属性íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
getíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return this.keys.Length;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public int Count //当前元素个数íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
getíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return this._size;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#endregioníS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#region 公有方法íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
//添加元素íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public void Add(TKey key, TValue value)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (key.Equals(null))íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
throw new ArgumentNullException("key");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
//使用二分查找法搜索将插入的键íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int num1 = Array.BinarySearch<TKey>(this.keys, 0, this._size, key, this._sortDirectionComparer);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (num1 >= 0) //如果数组中已存在将插入的键íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
throw new ArgumentException("尝试添加重复值!");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.Insert(~num1, key, value); //在插入点插入键和值íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public void Print() //只用于测试íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
for(int i=0;i<_size;i++)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Console.WriteLine("key:{0} value:{1}",keys,values);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#endregioníS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#region 私有方法íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private void Insert(int index, TKey key, TValue value)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //在指定索引入插入数据íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (this._size == this.keys.Length)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.EnsureCapacity(this._size + 1);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (index < this._size)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //当插入元素不是添加在未尾时,移动插入点后面的元素íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Array.Copy(this.keys, index, this.keys, (int)(index + 1),íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
(int)(this._size - index));íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Array.Copy(this.values, index, this.values, (int)(index + 1),íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
(int)(this._size - index));íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.keys[index] = key; //在插入点插入键íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.values[index] = value; //在插入点插入值íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this._size++;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private void EnsureCapacity(int min) //确保当前容量íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //如果当前容量为,则增长为,否则翻倍íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int num1 = (this.keys.Length == 0) ? 4 : (this.keys.Length * 2);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (num1 < min)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
num1 = min;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.InternalSetCapacity(num1);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private void InternalSetCapacity(int value)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //调整容量íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (value != this.keys.Length)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (value < this._size)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
throw new ArgumentOutOfRangeException(íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
"value", "要调整的容量值太小");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (value > 0)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //重新开辟一块内存空间用来存放集合中的值íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
TKey[] localArray1 = new TKey[value];íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
TValue[] localArray2 = new TValue[value];íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (this._size > 0)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //数据搬家íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Array.Copy(this.keys, 0, localArray1, 0, this._size);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Array.Copy(this.values, 0, localArray2, 0, this._size);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.keys = localArray1;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.values = localArray2;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
elseíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //设置容量为íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.keys = ReversibleSortedList<TKey, TValue>.emptyKeys;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.values = ReversibleSortedList<TKey, TValue>.emptyValues;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#endregioníS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#region SortDirectionComparer类定义íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public class SortDirectionComparer<T> : IComparer<T>íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //ListSortDirection 枚举,有两个值:íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
//Ascending按升序排列,Descending按降序排列íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
private System.ComponentModel.ListSortDirection _sortDir;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
//构造方法íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public SortDirectionComparer()íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ //默认为升序íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
_sortDir = ListSortDirection.Ascending;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
//指定排序方向的构造方法íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public SortDirectionComparer(ListSortDirection sortDir)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
_sortDir = sortDir;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
//排序方向属性íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public System.ComponentModel.ListSortDirection SortDirectioníS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
get { return _sortDir; }íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
set { _sortDir = value; }íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
//实现IComparer<T>接口的方法íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public int Compare(T lhs, T rhs)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int compareResult =íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
lhs.ToString().CompareTo(rhs.ToString());íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 如果是降序,则反转.íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (SortDirection == ListSortDirection.Descending)íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
compareResult *= -1;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return compareResult;íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
#endregioníS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// SortDirectionCompareríS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public class TestíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
static void Main()íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
ReversibleSortedList<int, string> rs=new ReversibleSortedList<int, string>();íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(3,"a");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(1,"b");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(2,"c");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(6,"d");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Print();íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Console.WriteLine("当前容量为:"+rs.Capacity+"元素个数为:"+rs.Count);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(5,"e");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(4,"f");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Print();íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Console.WriteLine("当前容量为:"+rs.Capacity+"元素个数为:"+rs.Count);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(8,"g");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(7,"h");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Add(9,"i");íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
rs.Print();íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Console.WriteLine("当前容量为:"+rs.Capacity+"元素个数为:"+rs.Count);íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
}íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiíS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi 运行结果:íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:1
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:b
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:2
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:c
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:3
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:a
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:4
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:d
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi当前容量为:4
元素个数为:4
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:1
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:b
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:2
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:c
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:3
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:a
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:4
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:f
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:5
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:e
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:6
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:d
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi当前容量为:8
元素个数为:6
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:1
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:b
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:2
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:c
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:3
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:a
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:4
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:f
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:5
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:e
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:6
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:d
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:7
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:h
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:8
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:g
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰikey
:9
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰivalue
:i
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi当前容量为:16
元素个数为:9
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi从运行结果可以得知:刚开始插入了4
个元素后,容量为4
,接下来再插2
个元素,容量自动扩展为8
。最后再插入3
个元素,容量自动扩展为16
。并且,元素是按key
的顺序进行排列的,完全符合我们之前的预想。终于可以点鞭炮庆祝一下了,但不要高兴得太早,百里长征大概才走了几里地。随着代码越来越复杂,要走的路会变得更艰难。íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi