arraylist操作我总搞不清楚哪个是对象引用和哪个是对象copy。
比如我想拿出arraylist中的一个引用,用来修改里面的值。
是不是
myclass m1 = (myclass)arraymyclass[10];
这样应该是对象的引用吧?
那对象的copy呢?
如何自己定义一个对象,替换掉arraylist中的某一个?
还有如何返回arraylist中的一部分,比如我想拿出arraymyclass[3]~arraymyclass[5],做成一个新的arraylist,以拷贝形式。
arraylist里存储的是什么?arraylist里存储的都应该是对象指针,那么是copy出来个新对象,并且存储对象指针还是原对象的指针?
arraylist能不能存储的全都是引用,以方便修改对象的值?

解决方案 »

  1.   

    看ArrayList存储的对象到底是什么?如果是值类型则是拷贝,如果是引用类型则是指针
      

  2.   

    我想知道具体的用法。
    比如从arraylist里取得copy,要如何做,取得引用,要如何做。
    存储引用,要如何做,存储对象,要如何做。
    返回部分arraylist的copy,要如何做,返回部分arraylist的引用,要如何做。
      

  3.   

    还有如何返回arraylist中的一部分,比如我想拿出arraymyclass[3]~arraymyclass[5],做成一个新的_--------------------
    你可以用ArrayList自带的CopyTo方法ArrayList存储的是object,而object是所有类的基类(包括引用类型和值类型),所以ArrayList中可能存放的是对象的引用也有可能是存放的对象的值!
      

  4.   

    还有,想把arraylist中的值当作引用参数传给函数,要如何做。
    把arraylist中的值的copy当作参数传递给函数,要如何做。
    函数返回arraylist的值的引用,要如何做。
    函数返回arraylist的值的copy,要如何做。
      

  5.   

    我想知道的是具体写法,比如:
    myclass m1 = (myclass)arraymyclass[10];
    这个是返回对象的引用。
      

  6.   

    我明白arraylist是怎么回事,只是在用的时候有时需要引用,有时需要copy,我现在对写法有些不明确。
      

  7.   

    从ArrayList里使用系统实现的拷贝,应该是浅拷贝,也就是引用拷贝,要实现对象拷贝,估计要自己实现了。
    至于你说的存储引用和存储对象,我没明白什么意思。ArrayList应该是以以下方式存储的(值类型的在存储进该集合的时候,因为参数是Object类型,好像会自对装箱)
    对象A-------------------》栈中为A分配地址,该地址指向对像在堆中的地址-------》DA
    ArrayList中存储的是DA,而不是A,同样取出来的时候,新对像也是在栈中分配地址,并拷贝DA过去,如果单从A的方向来说,说是把A的值拷贝也无不可
      

  8.   

    值到 引用 做 装箱(boxing) 操作.
    引用到值 撤箱(unboxin) 操作.
    所谓装箱和拆箱是一个很抽象的概念 装箱是将值类型转换为引用类型 
    拆箱是将引用类型转换为值类型 
    利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来 
    例如: 
    int val = 100; 
    object obj = val; 
    Console.WriteLine (“对象的值 = {0}", obj); 
    这是一个装箱的过程,是将值类型转换为引用类型的过程 int val = 100; 
    object obj = val; 
    int num = (int) obj; 
    Console.WriteLine ("num: {0}", num); 
    这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程
      

  9.   

    arraylist操作我总搞不清楚哪个是对象引用和哪个是对象copy。
    比如我想拿出arraylist中的一个引用,用来修改里面的值。
    是不是
    myclass m1 = (myclass)arraymyclass[10];
    这样应该是对象的引用吧?//是的。
    那对象的copy呢?//copy应该调用clone方法,如果myclass有实现的话。对象copy需要对象自己定义。如果没有clone(或者类似的方法),你只能new一个然后一项一项的赋值。
    如何自己定义一个对象,替换掉arraylist中的某一个?//arraymyclass[10] = myclassX;原来的arraymyclass[10]如果没其他的引用指向他,gc会在合适的时候回收掉它。如果是有指向并且你希望destroy掉他的话,需要自己写析构并显式调用。
    还有如何返回arraylist中的一部分,比如我想拿出arraymyclass[3]~arraymyclass[5],做成一个新的arraylist,以拷贝形式。//不是很清楚.net有没有现成的这样的方法。如果没有,自己写一个collection<T> copy(int startIndex, int endIndex)也不是很麻烦。
    arraylist里存储的是什么?arraylist里存储的都应该是对象指针,那么是copy出来个新对象,并且存储对象指针还是原对象的指针?//是原对象地址,arraylist会creat一块新的空间(一个新的ArrayList对象)来存放原来对象们的地址。arraylist能不能存储的全都是引用,以方便修改对象的值?//本来就是这样。
      

  10.   

    arraylist里存储的是什么?arraylist里存储的都应该是对象指针
    ----------------
    你看看这个:
    int testInt=10;
    ArrayList arr=new ArrayList();
    arr.Add(testInt);
    testInt=11;
    ......//你认为此时arr[0]与testInt的值是一样的吗?
      

  11.   

    我觉得arraylist应该是先copy一个对象出来,然后再把这个新的copy的指针放到对象里才对吧。
      

  12.   

    添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。
      

  13.   

    ArrayList里面放的是对象,要装箱拆箱的
      

  14.   

    值类型才要装箱拆箱,引用类型装啥子箱哦
    引用类型,可以修改,值类型是不允许修改的,原因就是装箱拆箱操作
    引用类型存储在ArrayList中的是引用,如果用的是2.0那就改成泛型集合吧,这样可以应对那种值类型的修改,