ArrayList是集合,又是类
这个怎么理解呢?
比如Add方法,把项添加到集合的末尾,而又是类,那就添加到类得末尾?啥意思

解决方案 »

  1.   

    假设你是学生,你小名叫小强,如果我说你又是小强又是学生你肯定不会反对。
    类是容器的范畴,ArrayList是一种类名,名字叫集合,每种类都有他的属性,如集合类可以逐个添加对象
    类本身就像月饼模子,只用于创建月饼(对象或叫实例),我们只对对象操作(开吃月饼)。
    作为称呼,我们有时很容易混淆,如我们叫这个学生,实际不是指整个学生的概念,而是指某个人的概念,而我们有时说“加到类的末尾”实际是"加到这个集合类的实例/对象的末尾”
      

  2.   

    ArrayList是类,这个类就叫集合类,就像我们有叫Student类,Teacher类一样的,类里叶可以定义方法
      

  3.   

    因为public class ArrayList : IList, ICollection, IEnumerable, ICloneable
      

  4.   

    ArrayList list=new ArrayList();
    list.Add("test");
    ArrayList是一个类,其次,是一个集合类
    list是类的一个对象,可以调用类中的方法,例如Add()
    不过,好像ArrayList不建议常用了吧……建议使用List<T>
      

  5.   

    我正在学集合,所以,刚开始学ArrayList,
    假如有三个学生,小强、小王、小李,他们是集合ArrayList的实例A中的成员,我想知道,
    假如是数组的话,就是{小强,小王,小李}这种形式存在的,但是ArrayList是什么样式呢,
    A是ArraList的对象,里面有构造函数,有成员方法,但小强,小王,小李是怎么样存在里面的呢?
      

  6.   


    以下为ArrayList代码,通过反编译器查看,看“private object[] _items;”
    小强,小王,小李就在_items里面。
    [Serializable, ComVisible(true), DebuggerDisplay("Count = {Count}"), DebuggerTypeProxy(typeof(ArrayListDebugView))]
    public class ArrayList : IList, ICollection, IEnumerable, ICloneable
    {
        // Fields
        private const int _defaultCapacity = 4;
        private object[] _items;
        private int _size;
        [NonSerialized]
        private object _syncRoot;
        private int _version;
        private static readonly object[] emptyArray;
      

  7.   

    以下为ArrayList代码,通过反编译器查看,这是Add(object)方法,研究一下吧public virtual int Add(object value)
    {
        if (this._size == this._items.Length)
        {
            this.EnsureCapacity(this._size + 1);
        }
        this._items[this._size] = value;
        this._version++;
        return this._size++;
    }private void EnsureCapacity(int min)
    {
        if (this._items.Length < min)
        {
            int num = (this._items.Length == 0) ? 4 : (this._items.Length * 2);
            if (num < min)
            {
                num = min;
            }
            this.Capacity = num;
        }
    }public virtual int Capacity
    {
        get
        {
            return this._items.Length;
        }
        set
        {
            if (value != this._items.Length)
            {
                if (value < this._size)
                {
                    throw new ArgumentOutOfRangeException("value", Environment.GetResourceString("ArgumentOutOfRange_SmallCapacity"));
                }
                if (value > 0)
                {
                    object[] destinationArray = new object[value];
                    if (this._size > 0)
                    {
                        Array.Copy(this._items, 0, destinationArray, 0, this._size);
                    }
                    this._items = destinationArray;
                }
                else
                {
                    this._items = new object[4];
                }
            }
        }
    }
     
      

  8.   

    这是关键的
    if (value > 0)
                {
                    object[] destinationArray = new object[value];
                    if (this._size > 0)
                    {
                        Array.Copy(this._items, 0, destinationArray, 0, this._size);
                    }
                    this._items = destinationArray;
                }
                else
                {
                    this._items = new object[4];
                }
      

  9.   

    这么复杂啊?要想理解小强,小王,小李是怎么样存在ArraList里面的,要理解这么复杂的代码啊?
    如果只靠形象思维呢?
      

  10.   


    这就是微软的原生代码。
    其实很简单。。
    一个object数组(看上去像动态数据或普通的链表),增减的时候复制而已。。