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


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


          網站導航:
           

          導航

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 施秉县| 岳阳市| 兴仁县| 邻水| 宿迁市| 三明市| 林州市| 揭东县| 清水河县| 永修县| 高平市| 梧州市| 孟津县| 托克逊县| 陕西省| 辽中县| 呈贡县| 嘉善县| 札达县| 延吉市| 离岛区| 金坛市| 四川省| 武乡县| 江源县| 宜春市| 石首市| 琼结县| 赫章县| 江达县| 武定县| 西贡区| 临沧市| 莎车县| 林周县| 梁山县| 杭锦后旗| 左云县| 通渭县| 兴山县| 武强县|