关于列表简单程序,紧急求救!
本人想把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的话。你清空它自然就清空了。
------解决方案--------------------
for (int j=0; j< vmNum; j++)
{
vmList.get(j).setWaitingCloudletList(getCloudletList());
}
hehe,这就是个set方法,传进来的就是getCloudletList()这个对象,不知道你将的每次new新的list从何讲起?
------解决方案--------------------
请理解我的原话。我问的是getCloudletList()这个方法是怎么返回list的也就是怎么得到list的,如果得到的list不是每次new出来的那么你清空它,自然里面的元素就都清空了。如果是每次new新的list的话就不会有问题了
------解决方案--------------------
api原文
------解决方案--------------------
我认为在每次Set的时候必须new一个,其实这个问题你可以想一下DB接收的数据的时候,如果你的实体类接受数据不new一个的话,所有的实体类都会对应最后一条记录一样的.