simmone

今天才知道deep clone这回事,惭愧

今天的一段代码:
    List lista = new ArrayList();
    /*
    赋值给lista
   */

   List listb = (ArrayList)((ArrayList)lista.clone());

   /*
   用iterator取出内容进行修改
   */

  问题出现了:现在再用lista时,发现它的内容被修改过了。这是为什么呢?我    已clone()了呀。原来Java中List(包括Map等)的clone()执行的是shadow clone,也就是它只是拷贝了引用,如果将clone()后的内容进行了修改,它就会不知不觉中将原来的内容也进行了更改(其实就是一个)。
解决方法:自己进行deep clone()
List listb = new ArrayList();
for(Iterator ie = lista.iterator();ie.hasNext();)
{
    Object a = (Object)ie.next();

    Object b = new Object(a.get.., ..., ...);

    listb.add(b);
}

注意:用List的addAll之类方法也是shadow clone


posted on 2006-07-07 15:23 陈晓 阅读(677) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(1)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜