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)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 灵武市| 沙坪坝区| 汤阴县| 岳普湖县| 灵武市| 锦州市| 延安市| 泽州县| 焦作市| 平安县| 红桥区| 开鲁县| 林甸县| 苏尼特左旗| 碌曲县| 峨山| 五峰| 共和县| 阳城县| 长武县| 布拖县| 湘潭市| 牡丹江市| 徐汇区| 加查县| 罗山县| 临泉县| 雅安市| 龙川县| 花垣县| 昌江| 文安县| 水城县| 台南市| 绍兴县| 南溪县| 青海省| 安塞县| 西盟| 晋城| 吉林市|