.net Arraylist使用数组?

.net Arraylist使用数组?,.net,arrays,arraylist,.net,Arrays,Arraylist,ArrayList是否在内部使用数组?如果使用默认构造函数(new ArrayList()),这是一个空数组吗?谢谢。是的。。ArrayList本身使用一个数组 它包含一个对象数组(在java.c#中也应该是相同的)以提供同质性。虽然arraylist似乎是一个非常动态的内存分配类,但它的内部操作充满了数组 当您通过调用构造函数来创建一个对象时,它在内部调用一个数组,比如说一个有限大小的数组,时间可能是10(实际上在java中正好是10)。然后,当您向arraylist添加对象时,还必须增加内部

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

是的。。ArrayList本身使用一个数组

它包含一个对象数组(在java.c#中也应该是相同的)以提供同质性。虽然arraylist似乎是一个非常动态的内存分配类,但它的内部操作充满了数组


当您通过调用构造函数来创建一个对象时,它在内部调用一个数组,比如说一个有限大小的数组,时间可能是10(实际上在java中正好是10)。然后,当您向arraylist添加对象时,还必须增加内部数组。因此,必须增加内部阵列的大小。因此,将创建一个大小加倍的新数组,并将旧值复制到此新数组中。请注意,阵列的容量已增加,因此可以添加更多对象。

是的,阵列列表使用阵列存储项目


如果在未指定容量的情况下创建ArrayList,将使用默认的起始容量。默认启动容量可能取决于框架的版本。对于框架2,它似乎是零。在框架1中,我认为是16个。

是的。验证这一点的最简单方法之一是查看源代码。您可以直接使用,也可以简单地使用来反编译.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版本中更改(尽管可能不会更改)。另外,对于新的代码,你应该考虑使用<代码>列表>代码>而不是<代码> ARAYLIST/<代码> .< /P>你为什么想知道——一个面向对象编程的一个要点是封装,这样你就不需要知道一个类的内部使用它的接口了吗?(像往常一样,没有什么是完美的,他们可能有理由拥有这些知识)@Mark:封装的目的不是你完全不知道里面发生了什么;你不必知道里面发生了什么。了解系统的内部结构总是很有用的。按照您的逻辑,应该不需要同时使用
LinkedList
List
,因为它们都做相同的事情,对吗?@Mark-知道这一点很好,这样您就可以了解聪明人是如何做他们所做的事情的@rkrauter-如果您真的想知道,我建议您去看看.NET Framework库源代码(是的,它是可用的)。这并不是回答您的问题,但是如果您使用的是.NET2.0或更高版本,那么就没有理由再使用ArrayList了,因为我们有一个更好的(通用的)等价物--List类。。。查看IL,ArrayList首先使用一个空数组。添加值后,数组将更改为包含4项的数组。之后,只要阵列已满,容量就会增加一倍。+1是的,列表肯定应该用来代替这个旧集合。所有列表在内部都使用某种固定数组。我注意到stringbuilder也使用数组。所以没有动态内存?你必须预先分配一些内存并填充内容,当你需要添加更多内容时,你就预先分配一个更大的内存区域,然后再开始填充内容?只是试着学习内部。谢谢