List capacity Tips

  • 1075
  • 0
  • C#
  • 2013-08-22

摘要:List capacity Tips

 

List是一個非常多人使用的container,可是有個地方需要注意的是,
 
它底層是以陣列實做儲存的機制,初始值是4,之後擴充會以4的倍數擴充陣列,
 
若你不指定初始值的話,而你又加入很多的值,那麼它會不斷的重複擴充陣列的動作,
 
這將會是一個耗費資源的動作,因為每當陣列擴充時,它會宣告另外一個新的陣列,
 
然後會將原本陣列的參考值指向新的陣列,可是若你可以預期capacity,
 
那麼你可以在宣告List時直接使用它的建構子或者直接指定值給capacity屬性
 
//建議使用
//在宣告時直接給Capacity預設值
//the following is an example:
List<string> list = new List<string>(16);
//C#原始碼
publicvoidAdd(T item)
{
if(this._size ==this._items.Length)
{
this.EnsureCapacity(this._size+1);
}
//使用陣列儲存item
this._items[this._size++]= item;
this._version++;
}