作者gn00742754 (西門貓)
看板java
標題[問題] List副本的問題
時間Sat Jul 13 18:32:14 2013
不好意思馬上又有問題了^^"
我有一個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
推 LPH66:這就是 shallow copy 跟 deep copy 的差別 07/13 18:42
→ LPH66:ArrayList.clone() 是 shallow copy, 你寫的則是 deep copy 07/13 18:43
推 popcorny:大概就只能這樣寫 比較tricky的就是用Serializable來做 07/13 18:51
推 gmoz:應該就只能深層克隆而已 07/14 16:09
→ abola921:這個問題摸了好久,Serializable真的可以解(大部份) 07/15 17:46