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)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 微山县| 德清县| 泰和县| 富阳市| 治多县| 高台县| 敦煌市| 平顶山市| 嘉鱼县| 涟水县| 新平| 新龙县| 苏州市| 龙江县| 临夏市| 南靖县| 中卫市| 通榆县| 安化县| 鄂托克旗| 台南市| 怀仁县| 上虞市| 松滋市| 浦县| 洛南县| 台南市| 洪洞县| 买车| 库尔勒市| 青海省| 长武县| 沈丘县| 清丰县| 泰州市| 喀喇沁旗| 镇雄县| 南充市| 汾西县| 水富县| 泉州市|