Arraylist使用Array?

时间:2010-04-24 21:58:30

标签: .net arrays arraylist

ArrayList内部是否使用数组?如果我们使用默认构造函数(new ArrayList()),这是一个空数组吗?感谢。

3 个答案:

答案 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的新数组,并将旧值复制到此新数组中。请注意,数组的容量会增加,因此可以添加更多对象。