我想用ArrayList存储数据,想问的是,
把数组a加到ArrayList里面之后,再把a清空了,ArrayList里面的数据还在不在?就是说ArrayList里面是copy了数组a的指针,还是copy了数组a的数据?

解决方案 »

  1.   

    把数组a加到ArrayList里面之后,再把a清空了,ArrayList里面的数据不在了
      

  2.   

     string[] s = {"cd","ab","fd" };
                System.Collections.ArrayList list = new System.Collections.ArrayList();
                list.AddRange(s);
                foreach (string str in list)
                    Console.WriteLine(str);
                s = null;
                foreach (string str in list)
                    Console.WriteLine(str);
    有人测试吗
      

  3.   

    数据还在。
    int[] array = new int[] { 1,2,3,4,5 };
                ArrayList al = new ArrayList();
                al.AddRange(array);
                Array.Clear(array, 0, array.Length);
                Console.WriteLine(al.Count.ToString());
      

  4.   

    这个类似C++的深拷贝和浅拷贝,如果你放进去的是一个Class,然后清空的话,里面的数据就没有了(浅拷贝,只拷贝了指针),如果是一个简单的值类型的话,里面的数据还会在的(深拷贝,将值拷贝过去了)。
      

  5.   

    add和addrange完全没有区别的吧。
      

  6.   

    al.Add(array)后还在?这里array作为一个object添加到了al
      

  7.   

      int[] array = new int[] { 1, 2, 3, 4, 5 };
          ArrayList al = new ArrayList();
          al.AddRange(array);
          al.Clear();
          Console.WriteLine(al.Count.ToString());0
      

  8.   


    不懂你所说的什么是“清空数组”。如果不写出代码,很可能会各说各的“清空”概念。假设这个“清空”只是简单地释放数组变量。不管是“copy了什么”,其实都是值。只不过当它引用对象,那么这个值就是对象的引用。对于拷贝值类型的数据,显然不会丢失数据。而对于拷贝引用类型的数据(此时拷贝的引用),每个单元同一对象有两个引用,释放了一个显然不影响另一个引用。
      

  9.   

    改写一下#17楼的测试代码好了:int[] array = new int[] { 1, 2, 3, 4, 5 };
    ArrayList al = new ArrayList();
    al.AddRange(array);
    array = new int[] { 6, 7, 8 };
    Console.WriteLine(al.Count.ToString());
      

  10.   

    自己写个小程序调试一下,个人认为,如果不是copy的话不会丢。
      

  11.   


    看不懂这句话!工作经验告诉我们,不是说在一句话中举出c++的名词,我们就不去判断其逻辑是否正确了。实际上无法从这句话中理解“放进去的是一个Class”这是什么意思,这句话的前提不知道是什么意思,结论也就不能直接使用。
      

  12.   

    这个“添加”.......真的无语了。但是其实ArrayList中的数据当然还在啊,它总是有那一个引用指向array。
      

  13.   

    他这样子添加那个array一直在,但是array里面的数据没有了。
      

  14.   

    “放进去一个Class......里面的数据就没有了”,这就很纠结了。好就算明确了一个概念“是放入一个对象”而不是对象里面的数据,那么后边的半句话就又自相矛盾了。因为ArrayList里面根本没有array里面的数据,所以如果我们为他说清楚前半句,这个后半句就又不合逻辑了。
      

  15.   

    如果只是说是把array作为一个单元放入ArrayList,那么其实lz的问题的陈述也不合逻辑了。因为ArrayList里边根本谈不上去查找array里边的数据。ArrayList里边只有一个array,哪有array里边的数据?
      

  16.   

    回27楼:
      我的意思:int[] array = new int[] { 1,1,1 };
                int[] array1 = new int[] { 2,2,2 };            
                ArrayList al = new ArrayList();
               al.Add(array);
               al.Add(array1);
               array = new int[] { 2,2,2};
               
    这样之后,还能从al中读出{1,1,1}吗?不会变成{2,2,2}?
    还有就是我不知道怎么再把数组中的数取出来?
      

  17.   

    使用深COPY或者用循环语句单个元素单个元素的添加