作者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
1F:推 LPH66:这就是 shallow copy 跟 deep copy 的差别 07/13 18:42
2F:→ LPH66:ArrayList.clone() 是 shallow copy, 你写的则是 deep copy 07/13 18:43
3F:推 popcorny:大概就只能这样写 比较tricky的就是用Serializable来做 07/13 18:51
4F:推 gmoz:应该就只能深层克隆而已 07/14 16:09
5F:→ abola921:这个问题摸了好久,Serializable真的可以解(大部份) 07/15 17:46