[問題] List副本的問題

看板java作者 (西門貓)時間12年前 (2013/07/13 18:32), 編輯推噓3(302)
留言5則, 4人參與, 最新討論串1/1
不好意思馬上又有問題了^^" 我有一個JavaBean物件, 叫做User, 有一個List用來存放User們, 假設為 List<User> mUserList; 如果今天我需要一個mUserList的副本, 我之前的作法都是 List<User> copyUserList = new ArrayList<User>(mUserList); 但是我在Debug模式中發現, 雖然這兩個List的記憶體位址已經不同了, 但是裡面的物件的記憶體位址卻還是相同的, 我目前的做法是自己寫一個Copy函示, public static List<User> copyListUser(List<User> mListUser){ List<User> tempListUser = new ArrayList<User>(); for (User mUser : mListUser) { tempListUser.add(User.clone()); } return tempListUser; } 想請問有沒有更好的方法來做到這件事情。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.35.107.99

07/13 18:42, , 1F
這就是 shallow copy 跟 deep copy 的差別
07/13 18:42, 1F

07/13 18:43, , 2F
ArrayList.clone() 是 shallow copy, 你寫的則是 deep copy
07/13 18:43, 2F

07/13 18:51, , 3F
大概就只能這樣寫 比較tricky的就是用Serializable來做
07/13 18:51, 3F

07/14 16:09, , 4F
應該就只能深層克隆而已
07/14 16:09, 4F

07/15 17:46, , 5F
這個問題摸了好久,Serializable真的可以解(大部份)
07/15 17:46, 5F
文章代碼(AID): #1HuIonBo (java)