本人想把getCloudletList()得到的列表放到vmList中每个元素的waitingCloudletList列表中,然后删除vmList中某个对象的waitingCloudletList列表中的内容,发现把vmList中其他对象的waitingCloudletList列表中的内容也删除了!!估计是引用问题。应该如何解决?好久不写程序,手很生,望多指教!for (int j=0; j< vmNum; j++)
{
   vmList.get(j).setWaitingCloudletList(getCloudletList());
}

vmList.get(0).getWaitingCloudletList().clear();//为什么把其他对象中的元素也清除了?
for (int j=1; j< vmNum; j++)
{
   vmList.get(j).getWaitingCloudletList();
}

解决方案 »

  1.   

    引用问题没错,看看ArrayList的clear()源码(猜想你getCloudletList()是ArrayList类型):
     public void clear() {
                 modCount++;
         
                 // Let gc do its work
                 for (int i = 0; i < size; i++)
                     elementData[i] = null;
         
                 size = 0;
             }chear()方法是将list里面的所有元素设为空,然后有gc执行回收,而你的vmList.get(0).getWaitingCloudletList()==getCloudletList(),你清空后,相当于getCloudletList()这个对象清空了,那么你在执行 vmList.get(j).getWaitingCloudletList()时返回的getCloudletList()==null.
    PS:vmList.get(0).getWaitingCloudletList()=null,改成这样应该是能达到你的要求。
      

  2.   

    getCloudletList()你这个方法是怎么返回list的如果不是每次都new新的list的话。你清空它自然就清空了。
      

  3.   

    for (int j=0; j< vmNum; j++)
    {
       vmList.get(j).setWaitingCloudletList(getCloudletList());
    }hehe,这就是个set方法,传进来的就是getCloudletList()这个对象,不知道你将的每次new新的list从何讲起?
      

  4.   

    请理解我的原话。我问的是getCloudletList()这个方法是怎么返回list的也就是怎么得到list的,如果得到的list不是每次new出来的那么你清空它,自然里面的元素就都清空了。如果是每次new新的list的话就不会有问题了
      

  5.   


    我认为在每次Set的时候必须new一个,其实这个问题你可以想一下DB接收的数据的时候,如果你的实体类接受数据不new一个的话,所有的实体类都会对应最后一条记录一样的.