ArrayList内部是否使用数组?如果我们使用默认构造函数(new ArrayList()),这是一个空数组吗?感谢。
答案 0 :(得分:7)
是的。验证这一点的最简单方法之一是查看源代码。您可以使用reference source,也可以使用.NET Reflector来反编译.NET DLL。
这是ArrayList的相关部分,来自Reflector:
public class ArrayList : IList, ICollection, IEnumerable, ICloneable
{
static ArrayList()
{
emptyArray = new object[0];
}
public ArrayList()
{
this._items = emptyArray;
}
private object[] _items;
private static readonly object[] emptyArray;
// etc...
}
你不应该依赖于这种情况。这是一个实现细节,可能会在.NET的未来版本中发生变化(尽管可能不会)。另外,对于新代码,您应该考虑使用List<T>
而不是ArrayList
。
答案 1 :(得分:3)
是的,ArrayList使用数组来存储项目。
如果在未指定容量的情况下创建ArrayList,则使用默认启动容量。默认启动容量可能取决于框架的版本。对于框架2,它似乎为零。在框架1中,我认为它是16。
答案 2 :(得分:2)
是.. ArrayList本身使用一个数组。
它拥有一个Object数组(在java .c#中也应该是相同的)以给你一个同质性。虽然arraylist似乎是一个非常动态的内存分配类,但它的内部操作充满了数组。
通过调用构造函数创建对象的时间,在内部它调用一个有限大小的数组,可能是10(在java中实际上是10)。然后,当您向arraylist添加对象时,它也必须增加内部数组。因此必须增加内部阵列的大小。因此,创建一个大小为double的新数组,并将旧值复制到此新数组中。请注意,数组的容量会增加,因此可以添加更多对象。