日期:2014-05-20  浏览次数:20725 次

关于列表简单程序,紧急求救!
本人想把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();
}

------解决方案--------------------
引用问题没错,看看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,改成这样应该是能达到你的要求。
------解决方案--------------------
getCloudletList()你这个方法是怎么返回list的如果不是每次都new新的list的话。你清空它自然就清空了。

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

for (int j=0; j< vmNum; j++)
{
   vmList.get(j).setWaitingCloudletList(getCloudletList());
}

hehe,这就是个set方法,传进来的就是getCloudletList()这个对象,不知道你将的每次new新的list从何讲起?
------解决方案--------------------
引用:
引用:
getCloudletList()你这个方法是怎么返回list的如果不是每次都new新的list的话。你清空它自然就清空了。
for (int j=0; j< vmNum; j++)
{
   vmList.get(j).setWaitingCloudletList(getCloudletList());
}

hehe,这就是个set方法,传……

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


api原文
------解决方案--------------------
引用:
getCloudletList()你这个方法是怎么返回list的如果不是每次都new新的list的话。你清空它自然就清空了。


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