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 陳曉 閱讀(690) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 清新县| 云龙县| 新蔡县| 瑞丽市| 罗定市| 原平市| 册亨县| 兴和县| 新巴尔虎右旗| 靖州| 鲜城| 奈曼旗| 交城县| 黑龙江省| 沅陵县| 新兴县| 庐江县| 营口市| 临猗县| 通海县| 新蔡县| 新疆| 鲁甸县| 池州市| 保定市| 府谷县| 盐亭县| 邵东县| 新晃| 宁德市| 曲松县| 龙门县| 青海省| 曲阜市| 元阳县| 峨山| 东辽县| 洛阳市| 沾化县| 修武县| 定结县|