我创建了自己的列表,其中静态int为length。当您不知道集合的大小并且想要构建它时,这些事情是如何完成的。我知道有一个内置列表,但我想建立自己的内容来理解它的内部工作。我在构造函数中将其定义为size = int 5,因此它现在将输出1 2 3 0 0并且我想知道如何调整它并使用具有未定义长度的构造函数。我无法自己解决一些帮助。
我修好了。感谢您的回答真的很快,很容易理解我从未听过.net参考,所以感谢网站。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List l = new List();
l.Add(1);
l.Add(2);
l.Add(3);
l.Add(4);
foreach (int n in l)
{
Console.WriteLine(n);
}
Console.Read();
}
}
class List
{
private int _lLength;
private int[] _lArray;
private int _lPos;
public List()
{
/*
* Create an array with a default size
* If it doesn't fit anymore create a new one and copy it
* to a new array and double the size
*/
this._lArray = new int[2];
}
public List(int c)
{
this._lLength = c;
this._lArray = new int[this._lLength];
this._lPos = 0;
}
public void Add(int n)
{
if (this._lArray.Length <= this._lPos)
{
// So now is the array < then the array we want to return
int[] tmp = this._lArray;
this._lArray = new int[tmp.Length * 2];
Array.Copy(tmp, this._lArray, tmp.Length);
}
this._lArray[this._lPos++] = n;
}
public IEnumerator<int> GetEnumerator()
{
foreach (int n in this._lArray)
yield return n;
}
}
}
答案 0 :(得分:1)
在内部,List<T>
对象保持一个默认大小的数组(0,根据reference source)。当数组已满时,将创建一个新数组,与前一个数组相同,并将第一个数组中的所有项目移动到新数组。
所以在此列表中添加一个项目(数组大小= 2):
使列表后面的数组变为(数组大小= 4):
如果您事先知道列表的可能大小,则可以选择将预期的数字传递给List<T>
的构造函数。数组大小将设置为该长度,这可以提供更好的整体性能,因为它不必重新创建数组。