关于列表简单程序,紧急求救!

quiton 2013-01-08 10:14:56
本人想把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();
}
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ludatong110 2013-01-09
  • 打赏
  • 举报
回复
引用 2 楼 suciver 的回复:
getCloudletList()你这个方法是怎么返回list的如果不是每次都new新的list的话。你清空它自然就清空了。
我认为在每次Set的时候必须new一个,其实这个问题你可以想一下DB接收的数据的时候,如果你的实体类接受数据不new一个的话,所有的实体类都会对应最后一条记录一样的.
jiesiting 2013-01-09
  • 打赏
  • 举报
回复


api原文
suciver 2013-01-09
  • 打赏
  • 举报
回复
引用 3 楼 hucp2007 的回复:
引用 2 楼 suciver 的回复: 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的话就不会有问题了
笑莫问 2013-01-09
  • 打赏
  • 举报
回复
引用 2 楼 suciver 的回复:
getCloudletList()你这个方法是怎么返回list的如果不是每次都new新的list的话。你清空它自然就清空了。
for (int j=0; j< vmNum; j++) { vmList.get(j).setWaitingCloudletList(getCloudletList()); } hehe,这就是个set方法,传进来的就是getCloudletList()这个对象,不知道你将的每次new新的list从何讲起?
suciver 2013-01-09
  • 打赏
  • 举报
回复
getCloudletList()你这个方法是怎么返回list的如果不是每次都new新的list的话。你清空它自然就清空了。
笑莫问 2013-01-09
  • 打赏
  • 举报
回复
引用问题没错,看看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,改成这样应该是能达到你的要求。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧